汇编语言相关习题

目录

一、 画出8086CPU的工作原理示意图,并将以说明

二、画出80386CPU的工作原理示意图,并将以说明

三、总结16、32和64位CPU的整数和字符串的表示方法和范围:

四、举例说明常用的传输类汇编指令的使用:

五、举例说明常用的7种数据寻址方式和3种内存地址的寻址方式

六、举例说明常用的运算类汇编指令,并编程实现“1+2+3+…+100”求和


一、 画出8086CPU的工作原理示意图,并将以说明

        由于8086CPU采用16位结构,所以8086CPU在内部用地址加法器将两个16地址合成一个20位的物理地址,来提高寻址能力。通过20位的地址总线传送到存储器,在对应的物理地址中寻到相关的指令后,将指令送到指令缓冲器,再通过指令执行器去执行相关的指令。

二、画出80386CPU的工作原理示意图,并将以说明

80386为32位机,有三种工作方式

1、实地址方式(real mode)

实地址方式的工作原理与8086基本相同,其主要区别是32位微处理器能处理32位数据。

2、保护方式(protected mode)

保护方式下,CPU可访问232字节的物理存储空间,段长为232字节,而且还可以实施保护功能

32位微处理器为了支持多任务操作系统,以4个特权级来隔离或保护各用户及操作系统。

3、虚拟8086方式(virtual 8086 mode)

在虚拟方式下,运行8086程序可以尽量利用32位微处理器的保护机构。尤其是32位微处理器允许同时执行8086的操作系统及其应用程序和32位微处理器操作系统的应用程序。

三、总结16、32和64位CPU的整数和字符串的表示方法和范围:

16位PC机中整数的有效范围是-32768~32767(-2^8~2^8-1);

32位PC机中整数的有效范围是-2^16~2^16-1;

64位PC机中整数的有效范围是-2^32~2^32-1。

四、举例说明常用的传输类汇编指令的使用:

MOV 传送字或字节. (mov ax 2把2放入寄存器)。

MOVSX 先符号扩展,再传送。 

MOVZX 先零扩展,再传送。 

PUSH 把字压入堆栈。 

POP 把字弹出堆栈。 

PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈。

POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈。

PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈。 

POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈。

BSWAP 交换32位寄存器里字节的顺序。 

XCHG 交换字或字节。( 至少有一个操作数为寄存器,段寄存器不可作为操作数)

CMPXCHG 比较并交换操作数。( 第二个操作数必须为累加器AL/AX/EAX )

XADD 先交换再累加。( 结果在第一个操作数里 )

XLAT 字节查表转换。

── BX 指向一张 256 字节的表的起点, AL 为表的索引值 (0-255,即 0-FFH); 返回 AL 为查表结果。 ( [BX+AL]->AL)

五、举例说明常用的7种数据寻址方式和3种内存地址的寻址方式

一、7种数据寻址方式

1. 立即寻址方式

立即数包含在指令中,作为指令的一部分。

如 MOV AX 1234H。

2. 寄存器寻址方式

操作数在CPU内部的寄存器中,指令指定寄存器号。

16位操作数,寄存器可以是:AX,BX,CX,DX,SI,DI,SP和BP。

8位操作数,寄存器可以是:AL,AH,BL,BH,CL,CH,DL,DH。

如 MOV AX,BX。

3.直接寻址方式

操作数在寄存器中,指令直接包含操作数的有效地址(偏移地址)。

操作数一般存放在数据段(DS)。

可采用段超越前缀,操作数也可含在其他段中。

如 MOV AX,[8054H]。

若(DS)=2000H,则物理地址=20000H(低四位为0)+8054H=28054H、

则(AX)=物理地址28054H上的字。

主要用于变量。

4.寄存器间接寻址方式

操作数在存储器中,操作数有效地址在SI,DI,BX,BP之一,则一般情况下。

如果有效地址在SI,DI,BX中,则段值默认为DS。

如果有效地址在BP中,则默认的段值为SS。

如 MOV,AX [SI]。

5.寄存器相对寻址方式

操作数在存储器中,操作数的有效地址是一个基址寄存器(BX,BP)或变址寄存器(SI,DI)内容加上指令中给定的位移量。

默认段值同上。

如 MOV AX,[DI+1223H], 默认段值为DS。

6.基址加变址寻址方式

操作数有有效地址由基址寄存器(BX,BP)之一的内容与变址寄存器(DI,SI)之一的内容相加。

默认段值同上。

如 MOV AX,[BX][DI] 等价于 MOV AX,[BX+DI]。

则默认段值为DS。

也可采用段跨越前缀如:

MOV DS:[BP+SI],AL

MOV AX,ES:[BX+SI]  

这种寻址方式适用于数组或表格地处理。

7.相对基址加变址寻址方式

操作数有效地址 EA =(BX或BP)+(SI或DI)+偏移理。

如 MOV AX,[BX+DI+1234H] 等价于:

MOV AX,1234H[BX][DI]

MOV AX,1234H[BX+DI]

MOV AX,1234H[DI][BX]

二、3种内存地址

1.逻辑地址:

  包含在机器语言指令中用来指定一个操作数或一条指令的地址。这种寻址方式在80X86著名的分段结构中表现得尤为具体,它促使MS-DOS或Windows程序员把程序分成若干段。每一个逻辑地址都是有一个段和偏移量组成,偏移量指明了从段开始的地方到时间地址之间的距离。

2.线性地址:(虚拟地址)

  是一个32位无符号整数,可以用来表示高达4GB的地址,也就是高达4294967296个内存单元。线性地址通常用十六进制数字表示。

3.物理地址:

  用于内存芯片级内存单元寻址。它们与从微处理器的地址引脚发送到内存总线上的电信号相对应。物理地址由32位或36位无符号整数表示。

六、举例说明常用的运算类汇编指令,并编程实现“1+2+3+…+100”求和

加法指令add,adc,inc

减法指令SUB,SBB,DEC

比较指令CMP

乘法指令:MUL,IMUL。MUL无符号乘法(字/字节),IMUL有符号乘法(字/字节)

除法指令:div,idiv.div无符号除法(字/字节),idiv有符号除法(字/字节)

求反指令:neg。以0减去操作数

符号拓展指令:CBW,CWD;CBW字节转化为字;CWD,字转化为双字节;

十进制调整指令:daa,das,aaa,aas,aam,aad

DATA SEGMENT
    S DW (?)
DATA ENDS
CODE SEGMENT
     ASSUME CS:CODE,DS:DATA
START:
      MOV AX,DATA
      MOV DS,AX
      MOV CX,100
      MOV AX,0H
      MOV BX,1H
LOOP1:
      ADD AX,BX
      INC BX
      LOOPLOOP1          
      MOV S,AX
      MOV AH,4CH
      INT 21H
 CODE ENDS
      END START
 

                 

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

*ppsuc*

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

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

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

打赏作者

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

抵扣说明:

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

余额充值