汇编语言——第2次上机实验

时间:2021-01-16 00:44:29

实验要求:

求表达式x*y+z-200的值


实验步骤:


1.按照实验要求,画出相应的计算流程图


汇编语言——第2次上机实验

可以看到,先算x*y(保存在dx:cx),然后扩展z为双字节(dx:ax),计算x*y+z-200(保存在bx:cx),然后把结果移到w中。


2.按照基本的编辑步骤,编辑代码,并编译。

code:

DATA SEGMENT
X DW 1000
Y DW 2000
Z DW 3000
W DW 2 DUP(?)  ;定义段结束
DATA ENDS
CODE SEGMENT
        ASSUME CS:CODE,DS:DATA
        START: MOV AX,DATA
               MOV DS,AX
               MOV AX,X   
               IMUL Y
			   MOV CX,AX    ;把乘积结果保存起来(低8位)
			   MOV BX,DX    ;高8位
			   MOV AX,Z
			   CWD          ;位扩展,防止运算不匹配
			   ADD CX,AX
			   ADC BX,DX
			   SUB CX,200
			   SUB BX,0
			   MOV W,CX     ;把结果保存到w(低16位)
			   MOV W+2,BX   ;高16位
			   MOV AH,4CH
			   INT 21H
		CODE ENDS
		END START
		
			   
每一步都有相应的注释。其中IMUL为有符号乘法,了解更多请 点击


汇编语言——第2次上机实验

编译并连接

3.单步调试查看结果

汇编语言——第2次上机实验

不停t命令,直到程序返回dos

然后查看内存,可以看到:

x:03E8,  y:07D0 ,   z:0BD8  

结果w :1E8F70

4.验证结果

打开系统自带的计算机并ALT+3调到程序员专用型。

汇编语言——第2次上机实验

输入表达式计算结果得到2002800

汇编语言——第2次上机实验

转化为16进制:

汇编语言——第2次上机实验

ok,到此结束,运行结果正确。

知识点:

掌握cwd扩展,明白为什么要进行扩展。

掌握IMUL的用法,熟悉高位计算。

练习结构化编程。