王爽汇编语言学习(二)

148 阅读2分钟

实验二

预备知识

  • D 命令后边可以接上 “段寄存器:偏移地址” 用来指定地址
  • E、A、U 这些可以带有内存单元地址的命令中,也可以用段寄存器表示内存单元的段地址
  • mov ss,寄存器 后如果紧跟 mov sp,值,cpu 会在执行完 mov ss,寄存器 后自动执行 mov sp,值

(1)

image.png

好的,现在启动 DOSBox,使用 debug,a 命令然后输入代码

image.png

在执行完 mov ax,[0] 后 ax 的值为 ds:0000 处的字 0CEAH

image.png

image.png

add ax,[2] -> ax = 0CEAH + 12H = C0FCH

mov bx,[4] -> bx = 30F0H

add bx,[6] -> bx = 30F0H + 2F31H = 6021H

image.png

push ax 后 sp - 2 = 00FEH,修改的内存单元地址是 220FEH 内容为 C0FCH

image.png

push bx 后 sp - 2 = 00FCH,修改的内存单元地址是 220FCH 内容为 6021H

image.png

pop ax -> ax = 6021H sp + 2 = 00FEH

pop bx -> bx = C0FCH sp + 2 = 0100H

image.png

push [4] sp - 2 = 00FEH,修改的内存单元的地址是 220FEH 内容为 30F0H

push [6] sp - 2 = 00FCH,修改的内存单元的地址是 220FCH 内容为 2F31H

image.png

(2)

image.png

这里是指在一开始 2000:0 ~ 2000:f 中的内容全是0,然后在给 ax bx 等寄存器赋值后,这块内存的值就发生了变化,并且与寄存器中的值相等,显然这就是寄存器当中的值。仅凭现有的知识确实很难解释,待到后续课程自然而然即明白了。

实验三

准备

拿到 MASM.exe 和 LINK.exe 用于编译汇编代码和连接目标文件

链接:pan.baidu.com/s/1zXAwAOUK… 提取码:pejf

(1)

image.png

建议将 t1.asm 直接放在 DOSBox 挂载的文件夹下。然后直接 masm t1 link t1 即可得到运行文件了

image.png image.png

(2)

image.png

debug t1.exe

image.png

mov ax,2000 -> ax = 2000H

mov ss,ax -> ss = 2000H sp = 0

add sp, 4 -> sp = 4

image.png

pop ax -> ax = 0 ; sp + 2 = 6

pop bx -> bx = 0 ; sp + 2 = 8

push ax -> sp - 2 = 6

push bx -> sp - 2 = 4

image.png

pop ax -> ax = 0 ; sp + 2 = 6

pop bx -> bx = 0 ; sp + 2 = 8

mov ax,4c00 -> ax = 4c00H

(3)

image.png

d ds:0

image.png