资治通鉴 发表于 2020-10-19 17:03:15

大婶们帮忙看看下面的汇编

.386
DATA1 SEGMENT USE 16
T1                DW        -50H
T2                DD                F
T3                DB                '1234567'
DATA1 ENDS
DATA2 SEGMENT USE 16
BUF         DB                'ABCDEF'
F                DW        70H
DATA2        ENDS
CODE SEGMENT USE 16
ASSUME CS:CODE, DS:DATA1
START:
        MOV        AX,                DATA1
        MOV        DS,        AX
        MOV        SI,                6
        MOV         AX,                        ;3231H
        MOV        AX,                T1                ;FFB0H
        LDS        SI,                T2
        MOV        AX,                        ;0070H

        MOV        AH,        4CH
        INT 21H
CODE ENDS
END START

分析以上程序并计算每一次AX、DS、SI的值(答案已经写在注释里了)

MOV AX,
MOV AX,

这两句不明白,请教。应该是非常基础的汇编知识了吧,但是我不会!3231H这个值是咋算出来的

xieglt 发表于 2020-10-19 20:39:10

SI 叫做源变址寄存器,它通常是跟 DS一起用,即访问 DS段里 SI 地址这个内存的值

MOVAX, 相当于MOV   AX,DS:

因为
MOVAX,DATA1
MOVDS,AX
所以
DS = DATA1
DATA1 里定义了 1个DW 占2个字节,1个DD占4个字节
所以
MOV SI,6
之后 ,SI指向DS的第6个字节,即 T3
T3DB   '1234567'
MOV   AX,相当于在 T3处取了2个字节进 AX 即把字符 1和2取进了AX
字符1的ASCII码为 0X31H,字符2的ASICII码为 0X32H
因此内存至寄存器数据传送遵循低低高高地原则,即低内存的数进寄存器低位,
高内存的数进寄存器高位,所以 0x31H 进了 AL,0x32H进了AH,所以AX的值是 0x3231H

资治通鉴 发表于 2020-10-19 22:26:52

xieglt 发表于 2020-10-19 20:39
SI 叫做源变址寄存器,它通常是跟 DS一起用,即访问 DS段里 SI 地址这个内存的值

MOVAX, 相当于...

嗯嗯。谢谢回复。

MOV      AX,                      ;0070H

这句话是取T2的F的值,对吧,不是70H吗,为什么变成了0070H

资治通鉴 发表于 2020-10-19 22:30:14

xieglt 发表于 2020-10-19 20:39
SI 叫做源变址寄存器,它通常是跟 DS一起用,即访问 DS段里 SI 地址这个内存的值

MOVAX, 相当于...

这里的T1、T2、T3应该怎么理解?可以理解成变量吗?还有一个疑问,
T1                DW      -50H
这里的-50H为啥加符号啊,不是负数存储直接用补码吗,比如FF就是-1,没必要写符号啊?

xieglt 发表于 2020-10-20 07:45:52

资治通鉴 发表于 2020-10-19 22:30
这里的T1、T2、T3应该怎么理解?可以理解成变量吗?还有一个疑问,
T1                DW      -50H
...

-50H也就是10进制的-80,也就是16进制的FFB0H
T1,T2,T3可以理解为高级语言中的变量,不过
是全局变量或者静态变量。
70H 因为是 DW(WORD,两个字节,低位进AL,高位进AH,高位是0),所以是 0070H,

资治通鉴 发表于 2020-10-20 12:31:58

xieglt 发表于 2020-10-20 07:45
-50H也就是10进制的-80,也就是16进制的FFB0H
T1,T2,T3可以理解为高级语言中的变量,不过
是全局变量或 ...

F                DW      70H
那这句话为什么不写0070H呢,不是两个字节吗,算是简写吗?

-50H,那如果不加符号怎么知道他到底是有符号还是无符号数呢?同样的这里的-50H不也是WORD类型的吗,为啥不写-0050H呢?
页: [1]
查看完整版本: 大婶们帮忙看看下面的汇编