+ -
当前位置:首页 → 问答吧 → 汇编疑问

汇编疑问

时间:2011-08-13

来源:互联网

假设有100个16位无符号数存放在从1234:5678H开始的内存中,现需要求它们的和。设把32位的和保存在DX和AX寄存器中:

下面的程序片段能实现上述功能:
。。。

MOV AX,1234H
MOV DS,AX
MOV SI,5678H
MOV AX,0
MOV DX,AX
MOV CX,100

NEXT:ADD AX,[SI]
ADC DX,0
INC SI
INC SI
DEC CX
JNZ NEXT
....

前两步能不能直接写成 MOV DS,1234H?
为什么 INC SI 要写两次?

作者: zhuoshijinfei   发布时间: 2011-08-13

问:前两步能不能直接写成 MOV DS,1234H?
答:不可,指令违法

问:为什么 INC SI 要写两次?
答:因为数组元素的跨度是二个字节。

 

作者: gsy999   发布时间: 2011-08-13

引用楼主 zhuoshijinfei 的回复:
假设有100个16位无符号数存放在从1234:5678H开始的内存中,现需要求它们的和。设把32位的和保存在DX和AX寄存器中:

下面的程序片段能实现上述功能:
。。。

MOV AX,1234H
MOV DS,AX
MOV SI,5678H
MOV AX,0
MOV DX,AX
MOV CX,100

NEXT:ADD AX,[SI]
ADC DX,0……
第一问,8086寄存器不能够直接将数据直接写入段寄存器
,第二问寄存器是16位二进制,而你要把32位的和保存

作者: quan958201599   发布时间: 2011-08-13

intel规定不可以直接立即数赋值给段寄存器。

作者: mydo   发布时间: 2011-08-13

热门下载

更多