微机原理与接口技术-第4章指令系统9 44页
微机原理与接口技术-第4-1章
例4-3 用键盘最多输入10个字符,并存 入内存变量Buff中,若按“Enter”键,则 表示输入结束。
用BIOS层功能调用实现 层功能调用实现 的源程序: 的源程序: .MODEL SMALL CR EQU 0DH .STACK 200H .DATA Buff DB 10 DUP(?) .CODE .STARTUP MOV CX, 0AH LEA BX, Buff
Windows层功能模块的调用
Win32 API使用堆栈来传递参数 API函数调用 C语言的消息框函数的声明: int MessageBox( HWND hWnd, // handle to owner window LPCTSTR lpText, // text in message box LPCTSTR lpCaption, // message box title UINT uType // message box style );//参数 最后还有一句说明: Library: Use User32.lib.//说明这个函数的位置
API 函数的返回值
有的API 函数有返回值,如MessageBox 定义 函数有返回值, 有的 的返回值是int类型的数,返回值的类型对汇编 的返回值是 类型的数, 类型的数 程序来说也只有dword 一种类型,它永远放在 一种类型, 程序来说也只有 eax 中。如果要返回的内容不是一个 如果要返回的内容不是一个eax所能 所能 容纳的, 容纳的,Win32 API 采用的方法一般是返回一 个指针, 个指针,或者在调用参数中提供一个缓冲区地 干脆把数据直接返回到缓冲区中去。 址,干脆把数据直接返回到缓冲区中去。
.REPEAT MOV AH, 0H INT 16H .BREAK .IF AL==CR MOV [BX],AL INC BX .UNTILCXZ .EXIT 0 END
单片机微型计算机原理及接口技术课后习题答案第4章
单片机微型计算机原理及接口技术课后习题答案第4章4-2 试述指令MOV A,R0和MOV A,@R0的区别两条指令的目的操作数相同,两条指令的区别在于源操作数来源不同:MOV A,R0 指令的源操作数就是R0寄存器的内容;而MOV A,@R0 指令的源操作数是位于存储器单元内,且存储器单元的地址是R0寄存器的内容。
4-3 试述指令MOV A,20H和MOV A,#20H的区别MOV A,20H 源操作数是直接寻址,20H表示源操作数所在存储器单元的地址。
MOV A,#20H 源操作数是立即数寻址,#20H是立即数,也就是源操作数。
4-4 说明一下指令中源操作数所在的存储器类型。
(1)MOV A,#30H; 立即数#30H,就是源操作数,存在于指令中,所以位于程序存储器。
(2)MOV A,30H; 30H是源操作数所在数据存储单元的地址,所以源操作数位于数据存储器。
(3)MOVC A,@A+DPTR;源操作数是变址寻址, 助记符MOVC表示源操作数位于程序存储器。
(4)MOVX A,@DPTR; 源操作数是寄存器间接寻址, 助记符MOVX表示源操作数位于外部数据存储器。
4-5 判断下列指令书写是否正确:(1)MOV A,B; ✔(2)MOV A,#3000H ; ✘,因为A是8位寄存器,而#3000H是16位数值,没法全部存到A里(3)INC,#20H ; ✘只能INC A/direct/Rn/@Ri/DPTR(4)MOV 5,A ; ✔,注意目的操作数是直接寻址方式,不是立即寻址(5)MOV 30H,40H; ✔(6)MOV B,@DPTR ; ✘,@DPTR寻址用于MOVX指令,不能用于MOV指R(7)CJNE 30H,#80H,NEXT ; ✘,CJNE指令格式只能是CJNE A/Rn/@Ri,#data,rel或CJNE A,direct,rel(8)POP A ; ✘只能是直接寻址方式POP direct,正确的是POP ACC(9)PUSH ACC; ✔(10)SJMP 2000H ; ✘rel的范围是-128~127(用补码表示其值)共256B范围4-6 设ACC=12H,B=64H,SP=60H,30H中存放的是78H,试分析下列程序执行后,ACC、B、30H、SP中的内容分别为多少,并画出堆栈示意图。
微型计算机原理-第4章(4)微机原理与接口技术(第三版)(王忠民)
第四章 80x86 指令系统—累加器专用指令
⑴ 输入指令 ①直接寻址的输入指令 指令格式及操作:
IN acc, port ;(acc) ←(port)
②间接寻址的输入指令
指令格式及操作:
IN acc, DX
;(acc) ←((DX))
第四章 80x86 指令系统—累加器专用指令
⑵ 输出指令
①直接寻址的输出指令 指令格式及操作:
第四章 80x86 指令系统—通用数据传送指令
说明: *堆栈按后进先出原则组织。 *堆栈操作以字为单位进行。 *目的操作数dst不可以是CS。 *指令中的操作数不能是立即数。
第四章 80x86 指令系统—通用数据传送指令
例:已知(AX)=1234H,(BX)=5678H,分析下面程序段的执 行过程。
REG <=> REG/MEM • 段寄存器的内容不能参加交换
例: XCHG BX,[BP+SI]
第四章 80x86 指令系统—累加器专用指令
(二) 累加器专用指令 这类指令中的一个操作数必须是累加器。累加器操作数可以 是8位的,也可以是16位的。
第四章 80x86 指令系统—累加器专用指令 1.输入/输出指令
DI 1234H DS 4000H
DM
34H 2130H 12H 00H 2132H 40H
第四章 80x86 指令系统—地址传送指令
3. 地址指针装入ES指令 指令格式:
LES reg16, mem32 此指令的功能是将源操作数所对应的双字长的内存单元中的高 字内容(一般为16位段基址)送入ES,低字内容(一般为偏移地址) 送入指令所指定的寄存器中。例如:
LES DI, [2130H]
DI 1234H ES 4000H
第4章(1)微机原理与接口技术(第三版)(王忠民)
第四章 80x86 指令系统—立即数寻址方式
MOV AX, 1234H
程序存储器
AH AL
12H 34H 操作码字节 指
34H 令
12H
码
第四章 80x86 指令系统—寄存器寻址方式
2)寄存器寻址方式 操作数存放在CPU的内部寄存器reg中:
8位寄存器r8: AH、AL、BH、BL、CH、CL、DH、DL 16位寄存器r16: AX、BX、CX、DX、SI、DI、BP、SP 4个段寄存器seg: CS、DS、SS、ES
微机原理与接口技术
西安邮电大学计算机学院 宁晓菊
第四章 80x86 指令系统(第一讲)
第一章 微型计算机系统导论(第一讲)
本章主要内容
1 80x86指令的寻址方式(3讲) 2 80x86指令系统(5讲)
第四章 80x86 指令系统(第一讲)
第一章 微型计算机系统导论(第一讲)
本讲主要内容
1 寻址方式概述 2 数据寻址方式之一:
80 21H
操作码
代
21H
码
AL
段
80
第四章 80x86 指令系统—I/O端口寻址方式
⑵ 间接端口寻址方式 MOV DX, 1234H OUT DX, AL
I/O接口 0001H
DX
12
34
0002H
……
AL
80 1234H
80
Thank you!
感谢
谢谢,精品课件 资料搜集
第四章 80x86 指令系统—立即数寻址方式
1)立即数寻址方式 指令中的操作数直接存放在机器代码中,紧跟在操
作码之后(操作数作为指令的一部分存放在操作码 之后的主存单元中)
微机原理与接口技术PPT课件
(2)如果要对其他段寄存器所指出的存储区 进行直接寻址,则本条指令前必须用前缀指出 段寄存器名。
21018H 21019H
AA 数 BB 据
段
8
三、直接寻址
• 操作数的存储区是在DS段以外的段中,则应 在指令中指定段跨越前缀:
• MOV BX, ES:[2000H] 设ES=3000H,则指令执行后是将32000H
• 操作数的寻址方式有以下几种:
•
立即数寻址
寄存器寻址
直接寻址
寄存器间接寻址
寄存器相对寻址
基址加变址寻址
相对的基址加变址寻址
• 例:指令形式:
MOV AX, 0000H; AX← 0000H
助记符 目的操作数 源操作数
4
一、立即数寻址
• 操作数紧跟在操作码的后面,与操作码一起放在码段
区域,立即数可以为8位,也可以为16位。
设SS=3000H,BP=2000H, COUNT=1050H
有效地址为: EA=2000H+1050H=3050H
物理地址: 堆栈段=30000H+3050H=33050H
存储器
M
10000H 8B 代
10001H 86 码
10002H
段
AH AL BB AA
33050H 33051H
AA 堆 BB 栈
代码:8B 07
设 DS=2000H,BX=5000H CS=1000H,IP=0000H
物理地址: 代码段:CS000H 8B 代
10001H 07 码
10002H
段
数据段:DS ×16+BX=25000H
AH AL
BB AA
25000H 25001H
微机原理与接口技术课本
第1章微型计算机基础1.1 计算机中数的表示和运算1.1.1 计算机中的数制及转换在微型计算机中,常见和常使用的数制♦十进制♦二进制♦八进制♦十六进制等。
1.十进制十进制计数特征如下:♦使用10个不同的数码符号0,1,2,3,4,5,6,7,8,9♦基数为10♦每一个数码符号根据它在数中所处的位置(即数位),按逢十进一决定其实际数值。
任意一个十进制正数D,可以写成如下形式:(D)10=D n-l³10 n-1 +D n-2³10 n-2 +…+D l³101+D0³100+D—l³10 -1+D-2³10-2+²²+D-n³10-n2.二进制在二进制计数制中,基数是2,计数的原则是“逢2进1”。
特征如下:♦使用两个不同的数码符号0和l♦基数为2♦每一个数码符号根据它在数中所处的位置(即数位),按逢二进一决定其实际数值。
任意一个二进制正数B,可以写成如下形式:(B)2=B n—l³2 n-1 +B n—2³2 n-2+…+B l³21+B0³20+B—l³2 -1+B-2³1-2+²²+B-n³1-n十进制TO二进制把十进制整数转换成二进制整数通常采用的方法是“除以2取余数”。
把十进制小数转换成二进制小数所采用的规则是“乘2取整”。
在计算机中,数的存储、运算、传输都使用二进制。
[例 1-2] 将十进制小数0.6875转换成二进制小数3.八进制在八进制计数制中,基数是8,计数的原则是“逢8进1”。
特征如下:♦使用8个不同的数码符号0,1,2,3,4,5,6,7♦基数为8♦每一个数码符号根据它在数中所处的位置(即数位),按逢八进一来决定其实际数值。
任意一个八进制正数S,可表示为:(S)8=S n—l³8 n-1+S n—2³8 n-2+²²+S1³8 1+S0³8 0 +S—l³8–1+²²+S-m³8-m转换: 将十进制整数转换成八进制整数的方法是“除以8取余数”。
《微机原理与接口技术》(第四版)周何琴课后习题答案
第1章绪论作业1. 将下列二进制数转换成十进制数。
(1)11001010B=202 (2)00111101B=61(3)01001101B=77 (4)10100100B=1643. 将下列十进制数分别转换为二进制数和十六进制数。
(2)76= 100 1100B =4CH(4)134= 1000 0110B =86H4. 求下列十进制数的BCD码(1)327=11 0010 0111(BCD码)(2)1256=1 0010 0101 0110(BCD码)6. 求出下列10进制数的原码、反码和补码(2)+85 (4)-85解:85=0101 0101B原码:+85= 0101 0101B -85= 1101 0101B反码:+85= 0101 0101B -85= 1010 1010B补码:+85= 0101 0101B -85= 1010 1011B10. 画出微型计算机的基本结构框图,说明各部分的主要功能是什么?解:微型计算机的基本结构框图如下:微处理器CPU:控制微处理器与存储器或I/O设备间的数据交换;进行算术和逻辑运算等操作;判定和控制程序流向。
微处理器主要完成:(1)指令控制:从存储器中取指令,指令译码;(2)数据加工:简单的算术逻辑运算;(3)操作控制:在微处理器和存储器或者I/O之间传送数据;(4)时间控制:程序流向控制。
存储器:用来存放数据和指令。
I/O接口:主机和外设间的桥梁,提供数据缓冲驱动、信号电平转换、信息转换、地址译码、定时控制等各种功能。
I/O设备:输入原始数据和程序,转换成计算机能识别的信息,送入存储器去等待处理。
输出运算结果。
总线:连接计算机系统中各功能部件的信息通道。
第2章 8086CPU作业2. 8086CPU内部由哪两部分组成?它们的大致是如何工作的?答:(1)8086CPU由指令执行部件EU和总线接口部件BIU两部分组成。
(2)① BIU先执行读存储器操作,从给定地址单元中取出指令,送到先进先出的指令队列中等待执行。
微机原理及应用-指令系统(9)
小田 @
5
例2:JMP [BX+DI] 设指令执行前: (DS)=3000H,(BX)=1300H, (DI)=1200H,(32500H)=2350H; 则指令执行后:(IP)=2350H 在汇编语言中,段内间接寻址通常写成: JMP WORD PTR[BX+DI] 表示所取得的目标地址是一个字。
小田 @
6
③段间直接转移 在指令中直接给出要转移到的目的段地址和偏移地址。 例:JMP 2000H:1000H 执行时,(IP)←1000H,(CS)←2000H
注:直接地址为符号地址时,段间直接转移指令中的符号 地址前应加操作符FAR PTR。 例:JMP FAR PTR far_label 其中的far_label为远类型的标号。
MOV MOV ROT: MOV ROL MOV AND ADD CMP JBE ADD DISP: MOV MOV INT DEC JNZ MOV MOV INT BX, 1234H CH, 4 CL, 4 BX, CL AL, BL AL, 0FH AL, 30H AL, 39H DISP AL, 7 DL, AL AH, 2 21H CH ROT DL, 48H AH, 2 21H
JLE ;小于或等于则转移(dist≤src) 转移条件为: (SF⊕OF=1)∨ZF=1
小田 @
13
③根据CX内容来决定是否转移的转移指令 JCXZ label 若(CX)=0,则转移到label处开始执行。
小田 @
14
条件转移指令举例:以十六进制数形式显示BX中的内容。
小田 @
10
① 根据单个标志位设置的条件转移指令
JB/JC JNB/JNC/JAE JP/JPE JNP/JPO JZ/JE JNZ/JNE JS JNS JO JNO
微型计算机原理-第4章(5)微机原理与接口技术(第三版)(王忠民)
▪DEC(Decrement) 减1
格式:DEC DST 操作: DST <= DST -1
第四章 80x86 指令系统—算术运算指令
▪NEG(Negate)求补
格式:NEG DST 操作: DST <= 0-DST
利用NEG指令可以得到负数的绝对值
60H
被
ACH
加
74H
数
3BH
…
DATA2 C1H
36H
加
9EH
数
D5H
20H
…
图4.19 例4.3中被加数和加数在内存中的存放情况
第四章 80x86 指令系统—算术运算指令
程序如下: LOOPER:MOV
MOV CX,5
;设置循环次数
MOV SI,0
;置位移量初值
CLC
AL,DATA2[SI]
;取一个
第四章 80x86 指令系统—算术运算指令
说明: 1、DST:REG/MEM,SRC:8/16data/REG/MEM。 2、DST、SRC不能同时为MEM。 3、加法指令影响标志寄存器的状态标志。 4、INC指令不影响CF标志。
第四章 80x86 指令系统—算术运算指令 例 4.3 计 算 两 个 多 字 节 十 六 进 制 数 之 和 : 3B74AC60F8H+20D59E36C1H=?
第四章 80x86 指令系统—算术运算指令
(3)乘法指令
▪MUL(Unsigned Multiple) 无符号数乘法
格式:MUL SRC 操作:AX<=AL*SRC(字节)/ DX,AX<=AX*SRC(字)
微机原理与接口技术习题答案4
第4章汇编语言程序设计1.已知在BUF的起始处保存有N个字符的ASCII码,编写汇编语言程序实现,将这组字符串传送到缓冲区BUFR中,并且使字符串的顺序与原来的顺序相反。
解:BUF DB "BONJOUR_BELLE"BUFR DB 100 DUP(?)MOV CX, NLEA SI, BUFLEA DI, BUFRADD DI,CXDEC DIL1:MOV AL,[SI]MOV [DI],ALINC SIDEC DILOOP L12.利用移位、传送和相加指令实现AX的内容扩大10倍。
解:将扩大后的结果放在DX:AX中,注意到10×AX=8×AX+2×AX。
XOR DX,DXSHL AX, 1RCL DX, 1MOV BX,AXMOV CX,DXSHL AX, 1RCL DX, 1SHL AX, 1RCL DX, 1ADD AX, BXADC DX, CX3.在缓冲区V AR中连续存放着3个16位的无符号数,编写程序实现将其按递增关系排列;如果V AR中保存的为有符号数,则再编写程序实现将其按递减关系排列。
解:V AR DW 1236,-432,3900XOR SI,,SIMOV AX,V AR[SI]CMP AX, V AR[SI+2]JAE L1XCHG AX, V AR[SI+2]L1:CMP AX, V AR[SI+4]JAE L2XCHG AX, V AR[SI+4]L2:MOV V AR[SI], AXMOV AX,V AR[SI+2]CMP AX, V AR[SI+4]JAE L3XCHG AX, V AR[SI+4]L3:MOV V AR[SI+2], AX4.编写程序段实现将AL和BL中的每一位依次交叉,得到的16位字保存在DX中,例如(AL)=01100101B,(BL)=11011010B,则得到的(DX)=10110110 10011001B。
微机原理与接口技术课后习题答案 清华大学出版社
微机原理与接口技术课后部分习题参考答案第一章2. 第3项任务,根据状态标志位的状态决定转移方向。
3. 程序存储是将要执行的程序的全部指令存储到存储器中,程序控制指程序开始执行后,通过指令流控制数据或计算机,完成设定的任务。
4. 分BIU 总线接口部件和EI执行部件两大部件,其中总线接口部件BIU负责取指令和数据,执行部件EI负责执行指令及运算。
在执行一条指令的同时可以取下一条指令,重叠运行,速度快。
5. 有6个状态标志,分别为进位标志CF、溢出标志OF、零标志ZF、奇偶标志PF、负标志SF、辅助进位标志AF。
3个控制标志分别为中断允许标志IF、单步标志TF、方向标志DF。
标志位的内容可以通过标志位操作指令来操作,例如CLC指令清除进位位,即使CF=0,STC指令使CF=1,CLI指令使IF=0,禁止中断,STI指令使IF=1,允许中断。
还可以通过LAHF指令取来标识寄存器的内容修改后用SAHF指令送回去。
也可以用PU SHF/POPF指令来修改标志寄存器的内容。
6. 实模式下分段靠4个段寄存器实现。
段寄存器中的值就是段地址,当偏移地址为0时的段地址+偏移地址就是该段的起始地址。
物理地址是由段地址左移4位后与偏移地址相加形成的20位地址。
7. 说法不一定正确。
对顺序执行指令的计算机是对的。
对重叠或流水线的计算机就不对了。
例如对8086CPU,由于采用了取指令与执行指令的一次重叠,尽管执行一条指令的总时间并没有变化,但连续执行n条指令时,总的时间会大大缩短,可以简单的比喻成总时间为原时间的二分之一,快了一倍。
8. 引入流水线后,执行一条指令的总时间并没有变化。
9. 高速缓存的目的是提高存储器的速度,进而提高了CPU的速度。
虚拟存储器的目的是为了给程序员或程序一个大的存储或运行空间。
10。
8086采用总线接口部件BIU与执行部件EU分开提高了速度,286将8086的BIU进一步分成3个部件,提高了并行性。
微机原理及接口第四章习题答案
“微机系统原理与接口技术”第四章习题解答1.判断以下说法是否正确,如有错,请说明原因并改正。
(1)伪指令在汇编过程中不会产生二进制代码。
(2)宏和过程的相同之处是都可用于简化源程序书写、精简目标代码。
(3)在计算机中,高级语言通常需要转换为汇编语言后才能执行。
(4)汇编语言程序上机一般包括编辑、汇编、链接和调试几个步骤。
答:(1)正确。
(2)错误。
宏不能精简目标代码。
(3)错误。
高级语言程序经编译或解释后直接转换为目标代码。
(4)正确。
2.已知数据和符号定义A1 DB ?A2 DB 8K1 EQU 100判断下列指令的正误,并说明错误指令的原因。
(1)MOV K1,AX(2)MOV A2,AH(3)MOV BX,K1MOV [BX],DX(4)CMP A1,A2(5)K1 EQU 200答:(1)错误。
K1是符号常数,在此处相当于立即数100,故不能做目的操作数。
(2)正确。
(3)正确。
(4)错误。
A1、A2都是字节变量,相当于两个存储器单元,故不能同时出现在一条指令中直接进行比较。
(5)错误。
用EQU定义的符号不能重新赋值,除非已用PURGE解除了原值。
3.若数据段中有定义NUM1 EQU 23HNUM2 DW 0则指令MOV NUM2,NUM1 的源、目操作数的寻址方式以及指令执行后NUM2+1单元的内容分别是什么?答:指令MOV NUM2,NUM1的源操作数使用立即数寻址,目的操作数使用直接寻址。
指令执行后NUM2+1单元的内容是0。
4.设DS=6000H,BX=8432H,SS=5000H,SP=3258H,内存69632H~69635H单元的内容依次是00H、11H、22H、33H。
4字节指令CALL DWORD PTR [BX+1200H] 本身位于2000H:3250H处的双字单元中。
当8086执行该指令后转移至子程序入口时,CS、IP、SS、SP各寄存器以及栈顶2个字单元的内容分别是多少?答:执行结果为CS=3322H,IP=1100H,SS=5000H,SP=3254H,栈顶的两个字即断点地址,为2000H:3254H。
微机原理及运用第4章
关系运算的操作数也必须为数字操作数。当关系成立时, 其结果为全 1;当关系不成立时,其结果为全 0。 汇编语言中的表达式不能构成单独语句, 只能是语句的 一个部分, 例如: MOVAX, BUF+2
ADDAL, VAL AND 0FH
JMPAGAIN+3 MOVBL, VB LE VA
4.1汇编语言基本概念
4.1.1汇编语言与机器语言
我们已经学过高级语言,例如BASIC语言或FORTRAN 语言,无论哪种语言,它都规定了一系列用于编写程序的语 句和应该遵循的语法规则。人们根据一种语言给定的语句及 其语法规则就可以写出程序,计算机则通过执行已编好的程 序来完成人们要求它完成的各种复杂功能。汇编语言也一样, 根据汇编语言的语句及其语法规则可以写出汇编语言程序。 但汇编语言与高级语言有较大的区别,汇编语言中的语句与 机器的种类和型号密切相关。
部分, 汇编时不形成任何目标码。注释必须以分号“;”开 头。 它可以作为语句的一个部分,也可以作为一个单独的语 句。
4.1.3汇编语言中的常数与表达式
1. 常数 常数可以分数值常数和字符串常数两类。数值常数按其 基数的不同,可以有二进制数、八进制数、十进制数、十六 进制数等几种不同的表示形式, 汇编语言中采用不同的后缀 加以区分。 B: 表示二进制数。 例如, 10110011B。
表示一条指令的这些字符常称为助记符。 我们必须指出, 采用助记符写出的程序,机器是不能直接执行的,因为上面 我们已经指出, 处理器在设计时是按二进制指令码考虑的。 所以,采用汇编语言编写的程序在执行前还必须将其“翻译” 成机器语言。通常将采用助记符指令写成的程序,称为源程 序,将它翻译成的机器语言程序称为目标程序。将汇编语言 的源程序翻译成目标程序的过程称为汇编过程或简称汇编。 汇编过程通常是由计算机完成的。它是通过执行一个专门完 成汇编的软件——称为汇编程序来实现的。既然写出的源程序 要由汇编程序将其翻译后才能执行,所以,我们编写的源程 序必须符合汇编程序的一系列要求或者规则,只有这样,你 的程序才能被正确地“翻译”。
微型计算机原理-第4章(2)微机原理与接口技术(第三版)(王忠民)
西安邮电大学计算机学院 宁晓菊
第四章 80x86 指令系统(第二讲) 第一章 微型计算机系统导论(第一讲)
本讲主要内容
1 数据寻址方式之二: 存储器寻址方式
第四章 80x86 指令系统—存储器寻址方式
存储器寻址方式 存储器寻址方式的操作数存放在存储器单元中。因此,要存 取操作数就必须知道其存储器的单元地址。在指令中可以直接给出 或间接给出操作数的地址,以达到存取操作数的目的。
段地址对应BX基址寄存器默认是DS,对应BP基址寄存器默认 是SS;可用段超越前缀改变
第四章 80x86 指令系统—存储器寻址方式
(BX)
(DI)
EA= (BP) + (SI)
MOV AH, [BP][SI]
SS:40000H
M
BP: 2000H + SI: 1200H
43200H
……
AH
40000H
有效地址是寄存器内容与有符号8位或16位位移量之和,寄 存器可以是BX、BP或SI、DI 有效地址=BX/BP/SI/DI+8/16位位移量
段地址对应BX/SI/DI寄存器默认是DS,对应BP寄存器默认是 SS;可用段超越前缀改变
第四章 80x86 指令系统—存储器寻址方式
MOV CL, [BX+1064H]
第四章 80x86 指令系统—存储器寻址方式
指令中给出的地址只是操作数的有效地址(EA),并且是 放在方括号(“[ ]”)中。若要从存储器中存取操作数还须 得到实际的地址(物理地址)。
物理地址=段基址左移四位+有效地址
物理地址=
CS
DS SS
× 10H
+ EA
ES
微机原理与接口技术(科学出版社)第4章课后习题及答案
微机原理与接口技术第四章课后习题1.指令主要有哪些分类方式? 其主要类别是什么?答:操作数、级别、功能。
操作数:无操作数、单操作数、双操作数三操作数;级别:机器指令和汇编指令功能:传送类、算术运算类、位操作类、I/O类、串操作类、CPU控制类、转移类;2.80X86的寻址方式有哪些?它们的具体含义是什么?答:操作数寻址方式主要有立即寻址方式、寄存器寻地址、存储器寻址方式、端口寻址方式(1)立即寻址方式:操作对象是这个操作数本身(2)寄存器寻地址:操作对象是寄存器中的内容(3)存储器寻址方式:操作对象是内存地址所对应的存储单元中的内容(4)端口寻址方式:操作数是指明端口的地址、端口地址所对应的端口中的内容是操作对象3. 指出下列各指令中源操作数和目的操作数的寻址方式:⑴MOV BX,WORD PTR[2200H] ⑵ AAA⑶JUM 2200H ⑷ LES DI,[2100H]⑸ MOV [BX+SI+8], BX ⑹ ADD AX,[BP+3000H]答:⑴MOV BX, WORD PTR[2200H] 源操作数:直接寻址;目的操作数:寄存器寻址⑵AAA 源操作数:寄存器寻址AL(也称隐含寻址);目的操作数:寄存器寻址⑶JUM 2200H 程序转移段内直接寻址方式⑷LES DI,[2100H] 源操作数:直接寻址;目的操作数:寄存器寻址⑸MOV [BX+SI+8], BX 源操作数:寄存器寻址;目的操作数:相对基址变址寻址⑹ADD AX,[BP+3000H] 源操作数:直接寻址;目的操作数:寄存器相对寻址4. 设CS=1000H,DS=2000H,ES=3000H,SS=4000H,IP=100H,SP=200H,BX=300H,BP=400H,SI=500 H,则:(1)10202H(2)40300H(3)21010H(4)42156H(5)31510H5.写出清除AX寄存器内容的方法并比较。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
21
2.循环控制指令
用在循环程序中以确定是否要继续循环。 循环次数通常置于CX中。 转移的目标应在距离本指令-128~+127的范围之 内。 循环控制指令不影响标志位。
22
(1)LOOP -- 循环计数
格式:LOOP label 操作:CX-1→CX;
[SP] ← IP ③ IP ← EA
例: CALL BX
;子程序地址由BX给出
CALL WORD PTR[SI] ;子程序地址在存储器中
31
(3) 段间直接调用
格式:CALL sub
注意:sub用FAR属性定义在另一代码段中
执行的操作: ① SP ← SP - 2;[SP] ← CS ② SP ← SP - 2; [SP] ← IP ③ IP ← sub低16位,CS ← sub高16位
例中的DWORD PTR表示转移地址是一个双字。
10
JMP DWORD PTR [SI]的机器码
11111111 11101100
[DS:SI]
DS:SI 41212H
00
10
41214H
00
4A
1000 IP 4A00 CS
段间间接转移操作示意图
11
2)条件转移指令--Jxx
条件转移指令可实现程序的条件分支。 条件转移指令根据标志位的状态来决定是否进行分 支转移。 格式:
说明:寄存器、内存单元存放的是有效地址。所
谓“间接”,是指当CPU执行指令时,将寄存器或
内存单元内的有效地址写入IP或EIP,从而实现转
移。
6
例2:JMP [BX+DI] 设指令执行前:
DS=3000H,BX=1300H, DI=1200H,[32500H]=2350H; 则指令执行后:IP=2350H
在汇编语言中,段内间接寻址通常写成: JMP WORD PTR[BX+DI]
表示所取得的目标地址是一个字。
7
P107例子(改错)
DS: POINTER DW P11
DW P12
…
CS: ...
MOV BX, OFFSET POINTER
JMP WORD PTR [BX]
…
MOV SI, OFFSET POINTER+2
JAE LABLE MOV AL, [BX]
;条件成立,转移 ;这条指令不执行
2000H
2019H 2019H 2019H 2019H 2019H 2019H 2019H 2019H 2009H …… 2100H
36H
28H 48H 33H 51H 37H 39H 42H 76H 59H ……
20
找最大数
CS: 对DS初始化 MOV CX,100 LEA BX,ARRAY MOV SI,0FFFEH ; -2
ZERO: INC SI INC SI CMP WORD PTR [BX+SI],0 LOOPZ ZERO MOV AX,[BX+SI]
26
3. 过程调用和返回指令
主程序调用子程序,用CALL指令实现,子程序 结束须用一条返回指令RET返回到主程序。 CPU在读取CALL指令时,IP自动递增,使它指 向下一条指令的存储单元地址。 CALL指令执行时,必须保存CALL指令后面的第 一条指令地址(断点地址)。
;直接转向0120H
JMP SHORT LP
;转向LP
JMP NEAR PTR BBB ;转向BBB
由于是段内转移,故转移后CS内容保持不变
5
②段内间接转移
格式:JMP reg/mem
(reg/mem)16 => IP
功能:跳转到由寄存器或存储单元的内容给出目标 地址处执行。
例1:JMP SI
若(SI)=1200H,则指令执行后,(IP)=1200H,于是转 向代码段的偏移地址1200H处开始执行。
格式:JMP Lable
Lable=>IP
功能:跳转到Lable处开始执行下一跳指令。
指令代码中给出的目标地址实际上是一个相对于 IP的位移量:
位移量 转移范围
汇编语言中格式
8位 -128~+127
JMP SHORT OPRD
16位 -32768~+32767 JMP NEAR PTR OPRD
例:JMP 0120H
MOV AL, [BX]
MOV CX,9
; 正确取值应为9
LAB:
INC BX
CMP AL,[BX]
JAE LABLE
MOV AL, [BX]
LABLE: DEC CX
JNZ LAB
MOV BX,2100H
MOV [BX], AL
… 18
找最大数
AL 36H
MOV BX, 2000H MOV AL, [BX]
JNB/JAE JB/JNAE
教材P108
14
表4-6 判断有符号数大小的条件转移指令
助记符
指令功能
助记符
JG
被减数(真值)大于减数(真值)转
JNLE
JGE 被减数(真值)大于或等于减数(真值)转 JNL
JL
被减数(真值)小于减数(真值)转
JNGE
JLE 被减数(真值)小于或等于减数(真值)转 JNG
段间返回指令RET的操作为:(RETF) 恢复子程序执行前CS:IP的内容。
JC(JB/JNAE)
为0时转移 JNZ(JNE)
JNS JNO JNP(JPO) JNC(JNB/JAE)
教材P108
13
表4-5 判断无符号数大小的条件转移指令
操作码助记符
指令功能
JA
被减数大于减数转
JNA
被减数小于或等于减数转
JNC
被减数大于或等于减数转
JC
被减数小于减数转
等价助记符 JNBE JBE
主程序
… CALL PROC1
子 程序 SUB- PROC1 PROC
(子程序入口地址)
MOV AL,0100H
…
① CALL PROC1 ③(断点地址)MOV AL
… CALL PROC1 XOR AX,AX …
, 0100H
② RET
29
1)子程序调用指令
一般格式:CALL sub ;sub为子程序的入口 根据子程序入口的寻址方式,子程序调用有四类:
例:JMP 2000H:1000H
执行时, IP←1000H, CS←2000H
注:直接地址为符号地址时,段间直接转移指令中 的符号地址前应加操作符FAR PTR。
例:JMP FAR PTR label 在模块设计时,从一个模块转移到另一个模块, 用段间直接转移。
9
④段间间接转移 格式:JMP mem32
mem低16=>IP mem高16=>CS
功能:跨段跳转到由一个双字内存单元的内容确 定的地址处执行。例如:
JMP DWORD PTR[SI]
设指令执行前:DS=4000H,SI=1212H,
[41212H]=1000H,[41214H]=4A00H
则指令执行后:IP=1000H,CS=4A00H
于是转到4B000H处开始执行指令。
(1) 段内直接调用 格式:CALL sub 执行的操作:
① SP)← SP-2; ② 将IP寄存器内容入栈,
[SP] ←IP; ③ IP ← sub;
例:CALL 1000H CALL TIMER ;TIMER为子程序名
30
(2) 段内间接调用
格式: CALL MEM/REG 执行的操作: ① SP ← SP-2; ② 将IP寄存器内容入栈:
(3)LOOPNZ (LOOPNE) -- 不相等继续
格式:LOOPNZ label 操作:CX-1→CX;
若CX≠0∧ZF=0,则转至label处执行; 否则退出循环,执行LOOP后面的指令。
24
例:编写程序,计算 X=1+2+3+……+99+100,结 果保存到AX。
NEXT:
MOV AX, 0 MOV CX, 100 ADD AX, CX LOOP NEXT
JMP WORD PTR [SI]
P11: … P12: …
YYH POINTER+ 2 YYH
P12的地址信息
POINTER
XXH XXH
P11的地址信息
8
③段间直接转移
格式:JMP Lable
Lable低16=>IP Lable高16=>CS
功能:跨段跳转到far_Lable处执行。指令中直接 给出要转移到的目的段地址和偏移地址。
INC BX CMP AL, [BX]
AL 36H
AL 4386H PK 48H [BX]
JAE LABLE MOV AL, [BX]
;条件不成立 ;执行这条指令
2000H
2019H 2019H 2019H 2019H 2019H 2019H 2019H 2019H 2009H …… 2100H
36H
例:CALL DWORD PTR [DI]
33
CALL DWORD PTR[DI] IPH IPL
CALL
代码段
CSH CSL
[DI] [DI]+1 [DI]+2 [DI]+3
数据段
段间间接调用示意图
34
2)子程序返回指令RET
段内返回指令RET的操作为:(RETN) 恢复子程序执行前IP的内容。
4.3 80x 逻辑运算和移位指令 串操作指令 程序控制指令 处理器控制指令 中断指令