汇编——寻址方式、指令系统及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,实验正确
  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: IBM-PC的寻址方式是基于物理地址的,它使用16位地址总线来访问内存和I/O端口。在实模式下,CPU可以访问1MB的物理内存,其中640KB被保留给系统内存,384KB被保留给显存和其他设备。在保护模式下,CPU可以访问4GB的物理内存Debug是一个命令行调试工具,可以用于调试汇编语言程序和内存映像文件。它可以用于查看和修改内存、寄存器和指令,以及单步执行程序和设置断点。Debug还可以用于加载和运行可执行文件,以及将程序转储到磁盘上。Debug是DOS操作系统的一部分,可以通过在命令行中输入“debug”来启动它。 ### 回答2: IBM-PC寻址方式指的是在IBM-PC计算机中,CPU对内存或外设进行寻址的方式。IBM-PC采用的是x86架构处理器,它的寻址方式主要有以下几种: 1.实地址模式:CPU直接访问物理地址,可以访问1MB以下的内存空间,适用于早期的PC机。 2.保护模式:CPU以虚拟地址的形式访问内存,由内存管理单元(MMU)将虚拟地址转换成物理地址,允许CPU在多任务环境下进行内存保护和分页机制,可以访问2^32个字节的内存空间,适用于现代PC机。 3.64位模式:基于x86-64架构的CPU支持执行64位代码,可以访问更大的内存空间和提供更好的执行性能。 Debug是一种调试工具,它可以协助程序员在开发过程中跟踪代码执行过程、寻找代码错误、修改程序等。Debug可以用于IBM-PC机器上的软件调试,使用方式如下: 1.在命令行中输入debug命令打开Debug模式,可以看到符号“-”表示Debug模式已打开。 2.debug命令的基本用法如下: -a 地址:在指定地址上进行汇编操作; -d 地址:显示指定地址的十六进制数据; -e 地址:在指定地址处执行指令,并停止在下一条指令处; -g:执行程序并运行到程序结束; -q:退出Debug模式; -w 地址:在指定地址处写入十六进制数据。 3.在Debug模式下可以使用寄存器监视器来监视寄存器的状态,使用分段器来查看当前的代码段和数据段,使用调试符号来跟踪参数、变量等信息。 总之,IBM-PC机的寻址方式Debug使用都是计算机编程中必须掌握的基础知识,它们对于软件开发和调试具有重要的意义。 ### 回答3: IBM PC是一款拥有极高影响力的计算机,拥有一系列先进的寻址方式,这些寻址方式为其提供了高效和强大的计算能力。接下来,我们将详细介绍IBM PC的寻址方式debug使用。 IBM PC的主要寻址方式包括:绝对寻址、间接寻址、寄存器寻址、相对寻址、段寻址等。 1、绝对寻址:指明了一个内存地址,寻址方案为[offset],例如:mov ax,[bx] 2、间接寻址:以一个内存地址为指针,从该地址内存中得到地址单元中的内容作为新的寻址方式,寻址方案为[offset],例如:mov ax,[bx] 3、寄存器寻址:以寄存器作为指针,从寄存器中的内容得到地址,寻址方案为寄存器名,例如:mov ax,bx 4、相对寻址:指令中提供的地址以目前指令执行位置为基础,加上一个偏移量(相对地址)作为最终操作地址,寻址方式为相对地址,例如:jmp short 5、段寻址:有时候需要在两个物理内存地址之间进行跳转。为了精确地指定这种跳转,引入了“段寻址”。 Debug是一个DOS下的调试工具,它可以单步执行汇编代码,查看寄存器内容等,是一种非常强大的调试工具。 如何使用Debug: 1、在DOS下面输入“debug命令即可启动调试器 2、输入“-u”命令,可以在调试器中查看汇编代码 3、以“e”开头的命令可以修改内存中的内容 4、以“t”开头的命令可以查看和修改寄存器的内容 5、以“p”开头的命令可以打印内存中的内容 6、以“d”开头的命令可以以16进制格式查看内存中的内容 7、以“g”开头的命令可以执行程序 总之,IBM PC的寻址方式debug使用对于汇编语言编程有着非常重要的作用,熟练掌握这些技能可以让我们更加高效地进行编程实践。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柯糖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值