汇编——寻址方式、指令系统及debug的使用
寻址方式、指令系统及Debug的使用
一、DEBUG的使用
A、U、T命令练习,使用如下程序:
Mov ax,1234
Mov bx,ax
Mov ch,56
Mov cl,78
Mov dx,cx
写出实验步骤,观察每条指令运行后相应寄存器及IP的变化
各指令执行后,ax=1234,bx=1234,cx=5600,cx=5678,dx=5678
步骤:进入debug,出现-号提示符后在后面用A命令写入MOV指令,debug把汇编指令翻译成机器码,存入内存,U命令进行反汇编,将机器码变成指令,T命令将指令逐条运行,可分步查看相应寄存器及IP的变化
可在debug中自行运行参照
二、寻址方式练习
1.
用E命令在200H处顺序放入11,22,aa,bb,55,66,ff
用A命令在100H处写入指令:
Mov ax,[200]
Mov bl,[200]
Mov si,201
Mov cx,[si]
Mov dl,[si]
输完后单步执行,观察其中各寄存器内容,写出实验步骤
步骤:debug中用E命令在200H处顺序放入11,22,aa,bb,55,66,ff,再用A命令在100H中写入题中所给MOV指令,T命令可将指令单步执行,
题中各指令功能为:
Mov ax,[200] 有效地址为200H的连续两个内存单元内容送给AX
Mov bl,[200] 有效地址为200H的内存单元送给AL
Mov si,201 将字数据0201H传送到si寄存器
Mov cx,[si] si寄存器所指的内存单元的内容送给CX
Mov dl,[si] si寄存器所指的内存单元的内容送给DL
各指令单步执行后各寄存器的详细内容变化可自己在debug中运行观察og.csdnimg.cn/20190712172422947.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjM5NDI1Mg==,size_16,color_FFFFFF,t_70)
2、
用A命令在100H处写入指令:
Mov bx,2
Mov ax,200[bx]
Mov di,5
Mov dx,200[di]
输完后单步执行,观察其中各寄存器内容,写出实验步骤
步骤:实验步骤同1
各指令功能为:
Mov bx,2 将字数据0002H传送到BX寄存器
Mov ax,200[bx] 操作数的有效地址为BX寄存器中的值加上位移量200H,即有效地址为0202H的连续两个内存单元内容送给AX
Mov di,5 将字数据0005H传送到di寄存器
Mov dx,200[di] 操作数的有效地址为di寄存器中的值加上位移量200H,即有效地址为0205H的连续两个内存单元内容送给AX
实验结果可自行在debug中运行观察。
3、
用E命令在200开始的字节单元顺序放01h,02h,AAh,BBh,EEh,FFh
用A命令在100H处写入指令:
Mov ax,200
Mov si,[201]
Mov ax,si
Mov ah,0
Mov si,ax
Mov cx,200[si]
Mov bx,0002
Mov dx,200[bx][si]
运行后DX内容是多少?先分析再上机验证,写出实验步骤
实验步骤:debug中用E命令在200H处顺序放入01h,02h,AAh,BBh,EEh,FFh,再用A命令在100H中写题目中的mov指令,完成后T命令进行单步执行查看各寄存器内容。
各指令功能:
Mov ax,200 将字数据0200H送到AX寄存器中
Mov si,[201] 将有效地址为0201H的内存单元送给si
Mov ax,si si寄存器内容送ax寄存器中
Mov ah,0 将字节数据0000H送到AX高8位寄存器中
Mov si,ax AX寄存器内容送si 寄存器中
Mov cx,200[si] 操作数的有效地址为si寄存器中的值加上位移量200H,即有效地址为0202H的连续两个内存单元内容送给CX
Mov bx,0002 将字数据0002H送到BX寄存器中
Mov dx,200[bx][si] 操作数的有效地址为BX寄存器中的值加上si寄存器中的值再加上偏移量200H,即有效地址为0204H的连续两个内存单元内容送给DX
4、
用A命令在100H处写入指令:
mov ah,88
mov [200],ah
mov al,99
mov si,201
mov [si],al
mov di,200
mov dx,[di]
运行后DX内容是多少?先分析再上机验证,写出实验步骤
最后的结果:9988
实验步骤:debug中用E命令在200H处顺序放入11,22,aa,bb,55,66,ff,再用A命令在100H中写题目中的mov指令,完成后T命令进行单步执行查看各寄存器内容。
各指令功能:
mov ah,88 将字节数据0088H送到AX高8位寄存器中
mov [200],ah AH寄存器内容送有效地址为0200H的连续两个内存单元
mov al,99 将字节数据0099H送到AX低8位寄存器中
mov si,201 将字数据0201H传送到si寄存器中
mov [si],al AL寄存器内容送SI寄存器所指的的连续两个内存单元
mov di,200 将字数据0200H送到DI寄存器中
mov dx,[di] di寄存器所指的内存单元的内容送给dx
各寄存器内容具体变化可自行在debug中运行查看。
三、
用A命令在100H处写入指令:
Mov ax,1234
Mov bx,ax
Mov si,300
Mov al,[si]
用U命令查看指令及机器码;用E200命令顺序写入:B8 34 12 89 C3 BE 00 02 8A 04
用U200命令查看,这个E200操作是在做什么?
步骤:在debug中用A命令在100H中写入题中所给mov指令,用U命令查看指令及机器码,可得机器码为B8 34 12 89 C3 BE 00 03 8A 04,
用E200命令顺序写入:B8 34 12 89 C3 BE 00 02 8A 04,用U命令查看其指令,发现和u100的第三条指令不同,为MOV SI,0200。
由此可知用a命令写的指令用u100查看之后是将指令翻译成机器码存入内存中。
e命令是将指令的机器码写入内存。
各寄存器内容具体变化可自行在debug中运行查看。
四、堆栈操作
观察堆栈区、SP及相关寄存器内容。
Mov ax,8899
Mov bx,aabb
Push ax
Push bx
Pop ax
Pop bx
观察其中各寄存器内容,写出实验步骤
步骤:各指令功能如下:
Mov ax,8899 将字数据8899H送到AX寄存器中
Mov bx,aabb 将字数据aabbH送到BX寄存器中
Push ax 将AX寄存器的内容放入栈中,SP的值减二
Push bx 将BX寄存器的内容放入栈中,SP的值再减二
Pop ax 将栈顶的内容放入AX中,(AX)=aabb,SP的值加二
Pop bx 将栈顶的内容放入BX中,(BX)=8899,SP的值再加二
可自行在debug中运行查看运行结果
五、指令系统
1.
Debug下在200H处写入01、02、03、AA、BB、CC,
在100H处写指令:
Mov bx,1
Mov si,3
Mov ax,200[bx][si]
Lea di,200[bx][si]
运行后AX及DI的内容是什么,观察验证。
步骤:各指令功能如下:
Mov bx,1 将立即数0001放入BX寄存器中
Mov si,3 将立即数0003放入SI寄存器中
Mov ax,200[bx][si] 操作数的有效地址为BX寄存器中的值加上si寄存器中的值再加上偏移量200H,即有效地址为0204H的连续两个内存单元内容送给AX
Lea di,200[bx][si] 将地址传给DI,即(DI)=0204
可自行在debug中运行查看运行结果。
2.
在100H处写指令:
Mov ax,ffff
Add ax,1
运行后AX为多少,CF、ZF、AF、PF、SF、OF是多少。
ADD影响标志位,运行后标志位变化如下:
(AX)=0000,CF=1,ZF=1,AF=1,PF=1,SF=0,OF=0。
将add ax,1换成Inc ax后呢?
INC指令中不影响CF标志位。如果在a指令中输入INC ax,1系统不会出现错误提示,运行后,CF=1。
(AX)=0000,CF=0,ZF=1,AF=1,PF=1,SF=0,OF=0
3.完成计算12345678H+9abcdef8H。写出实验步骤
步骤:将每个数字的高四位和低四位分别存储到寄存器中。将高四位和高四位相加,低四位和低四位相加。因为低四位相加有进位,所以在高四位进行相加时用ADC指令。
Mov ax,1234
Mov bx,5678
Mov cx,9abc
Mov dx,def8
Add bx,dx
Adc ax,cx
4.有一个16进制数62A0,与以下16进制数分别求和:1234,4321,
CFA0,9D60,每次运算后的结果及SF,ZF,CF,OF各是多少。写出实验步骤
步骤:
将16进制数62A0分别存到四个寄存器中,再和这四个数分别相加。
与第一个数相加结果为74D4,SF=0,ZF=0,CF=0,OF=0
与第二个数相加结果为A5C1,SF=1,ZF=0,CF=0,OF=1
与第三个数相加结果为3240,SF=0,ZF=0,CF=1,OF=0
与第四个数相加结果为0000,SF=0,ZF=1,CF=1,OF=0
可自行在debug中运行验证结果。
5.变量X、W、Z都是字,设计实验,完成计算Z=W+(Z-X),说明你
为变量分配的地址。写出实验步骤
①为变量分配地址:Z:[200] X:[202] W:[204];
②假设W=10,Z=12,X=8;那么Z=W+(Z-X)=14=0EH;
③将数据写入地址-e200 0c 00 08 00 0a 00
④写指令:MOV AX,[200]
SUB AX,X
ADD AX,W
MOV Z,AX;
⑤运行指令,-d200,结果为0E 00,实验正确
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix