汇编基础——玩转寄存器
任务1-运行程序,观察内存
各寄存器的初始值为:(CS)=2000H, (IP)=0, (DS)=1000H, (AX)=0, (BX)=0
(1) CPU执行的指令序列:
①初始时,CS:IP为2000H:0,则执行 mov ax,6622H;→ ②IP自增,执行 jmp 0ff0:0100;→③ 执行完跳转指令,跳转到10000H处,执行mov ax,2000H;→④ 顺序执行mov ds,ax;→⑤ mov ax,[0008];→⑥ mov ax,[0002];
(2) 写出CPU执行每条指令后,CS、IP和相关寄存器中的数值。
答:
- 执行的第1条指令是: mov ax,6622H
执行后相关寄存器中的值为:
DS: 1000H CS: 2000H IP: 0003H AX: 6622H BX: 0000H - 执行的第2条指令是: jmp 0ff0:0100
执行后相关寄存器中的值为:
DS: 1000H CS: 0ff0H IP: 0100H AX: 6622H BX: 0000H - 执行的第3条指令是: mov ax,2000H
执行后相关寄存器中的值为:
DS: 1000H CS: 0ff0H IP: 0103H AX: 2000H BX: 0000H - 执行的第4条指令是: mov ds,ax
执行后相关寄存器中的值为:
DS: 2000H CS: 0ff0H IP: 0105H AX: 2000H BX: 0000H - 执行的第5条指令是: mov ax,[0008]
执行后相关寄存器中的值为:
DS: 2000H CS: 0ff0H IP: 0108H AX: C189H BX: 0000H
执行的第6条指令是: mov ax,[0002]
执行后相关寄存器中的值为:
DS: 2000H CS: 0ff0H IP: 010BH AX: EA66H BX: 0000H
(可用debug运行验证)
任务2-理解栈机制
已知(SS)=3000H,(SP)=200H,(AX)=785AH,(BX)=1234H
2-1 在下面空白处写下结果(请在分析的过程中,在草稿纸上画出栈的结构来)
先执行
PUSH AX(解析:(SP)=(SP)-2,将ax的内容送入SS:SP指向的内存单元处,SS:SP此时指向新栈顶)
PUSH BX(解析:(SP)=(SP)-2,将bx的内容送入SS:SP指向的内存单元处,SS:SP此时指向新栈顶)
指令后,(SS)= 3000H (SP)= 01FCH
存放12H的字节数据的物理地址是 301FDH
再执行
POP AX
POP BX
此时(AX与BX交换数据)
(AX)= 1234H
(BX)= 785AH
掌握好基础,才能稳步前行~