首先将FIRST字变量与SECONFD字变量相加,结果存入THIRD1存储字中,然后将FIRST与SECOND两个字变量相乘,结果存入THIRD2开始的两个字中。
提示:FIRST与SECOND都是字变量,因此存放和的THIRD1单元也必须是字变量。而存放积的单元THIRD2必须是双字。
下面是此题目老师给的答案,可是不理解呀。求问高手。
Data segment
FIRST dw 1234h 这两个是什么意思??1234H,4567H是肿么出来的呀??
SECONFD dw 4567h
THIRD1 dw ?
THIRD2 dd ?
Data ends
Code segment
assume cs:Code,ds:Data
Start:
mov ax,data
mov ds,ax
mov ax,FIRST
add ax,SECONFD;相加
mov THIRD1,ax
mov ax,FIRST
mul SECONFD;相乘
mov word ptr THIRD2,ax 这个为什么要有word ptr 呀??
mov word ptr THIRD2+2,dx 这里的DX,是什么情况出现的呀??
mov ah,0 ;暂停
int 16h 求问暂停为何呀??
mov ah,4ch ;结束
int 21h
Code ends
end Start
------解决方案--------------------------------------------------------
>> 这两个是什么意思??1234H,4567H是肿么出来的呀??
这就是两个随便设置的测试数据而已,没有什么怎么来的。
>> 这个为什么要有word ptr 呀??
因为 THIRD2 定义的是 dd 类型,dword 长度的;ax 则是 word 的,所以为了避免汇编程序报错,就明确告诉它操作数的大小。
>> 这里的DX,是什么情况出现的呀??
不了解 mul 指令?DX 应该是上面的 mul SECOND 指令的乘法结果的高位 word,完整结果是 DX:AX。
>> 求问暂停为何呀??
应该是为了方便在调试软件里查看结果吧。其实,这个方法并不合适,除非是之前有显示结果。