汇编语言相关习题
目录
一、 画出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