题目:X , Y, Z , V 均为16位带符号数,计算( V- ( X*Y + Z – 540 ) )/ X。X , Y, Z , V装入X , Y, Z , V单元中,要求计算结果的商存入AX,余数存入DX寄存器。
原本设置x=2,y=5,z=560,v=35
DATAS SEGMENT
;此处输入数据段代码
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,0002
MOV BX,0005
IMUL BX
MOV CX,AX
MOV AX,0230
ADD CX,AX
SUB CX,021Ch
MOV AX,0023
SUB AX,CX
MOV BX,0002
IDIV BX
CODES ENDS
END START
但运行后结果如下:ax=00a1,dx=0001,进制转换后,商为161,余数为1
结果明显和我们已知商为2,余数为1是不一样的,这是为什么呢?
本小白调试了好久才知道,机器将mov ax,0230和mov ax,0023认知成十进制
你康康,230D=E6H, 23D=17H
但我们标注十六进制后,让我们再看一下下
代码段代码
MOV AX,0002
MOV BX,0005
IMUL BX
MOV CX,AX
MOV AX,0230h
ADD CX,AX
SUB CX,021Ch
MOV AX,0023h
SUB AX,CX
MOV BX,0002
IDIV BX
看看,ax,dx的结果是不是你想要的!!!
让我们不要捉急,再来验证,本人直接将560和35输入,不加任何标识,看看是否机器将其认为十进制
MOV AX,0002
MOV BX,0005
IMUL BX
MOV CX,AX
MOV AX,560 //
ADD CX,AX
SUB CX,021Ch
MOV AX,35 //
SUB AX,CX
MOV BX,0002
IDIV BX
看到这里,我们验证成功,若没有在数据段代码定义值,代码段采用立即数传送需标志进制,否则机器认知为十进制。
耶耶耶也,如果觉得有理的话,请打赏下小新人。
如果理解错误的话,请大家指出,勿喷,本小白虚心请教。欢迎各位大佬指导。
kaka