0
点赞
收藏
分享

微信扫一扫

汇编顺序程序设计习题及调试过程

我阿霆哥 2022-04-29 阅读 49
开发语言

题目: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

举报

相关推荐

0 条评论