数码0~9的ASCII码:30H~39H
大写字母A~Z:41H~5AH
小写字母a~z:61H~7AH
0dH:回车控制字符
0aH:换行控制字符
AH/AL AX称为累加器,用于算术与逻辑运算;与外设传送信息
BH/BL BX称为基址寄存器,存放存储器地址;用于算术与逻辑运算
CH/CL CX称为计数器,循环和串操作等指令中的隐含计数器;用于算术与逻辑运算
DH/DL DX称为数据寄存器,存放双字长数据的高16位;存放外设端口地址;用于算术与逻辑运算
SI 源变址寄存器,通常用于对数据段进行寻址
DI 目的变址寄存器,通常用于对附加段进行寻址
SP 基址指针寄存器,用于对堆栈段进行寻址(PUSH、POP指令);指示栈顶的偏移地址
BP 堆栈指针寄存器,通常用于对堆栈段进行随机寻址
(1)什么是标志?
用于反映指令执行结果的状态或用于控制指令的执行形式
(2)用途
指令执行后将影响有关的标志位,很多的指令的执行要利用某些标志
(3)状态标志与控制标志间的区别
状态标志用于记录指令执行结果的辅助信息
控制标志用于控制处理器执行指令的方式
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
OF |
DF |
IF |
TF |
SF |
ZF |
AF |
PF |
CF |
CF 进位标志
PF 奇偶标志
AF 辅助进位标志
ZF 零标志
SF 符号标志
OF 溢出标志
DF 方向标志
IF 中断允许标志
TF 陷阱标志
字或双字的存放:字或双字在存储器中占相邻的2个或4个存储单元;存放时,低字节存入低地址,高字节存入高地址。
地址对齐:字单元要安排在偶地址(xxx0B),双字单元要安排在模4地址(xx00B),……。
对齐的原因:取得较高的存取速度。
逻辑地址:段地址:偏移地址
物理地址:每个存储器单元都有的一个唯一的20位地址
物理地址=逻辑地址中的段地址左移4位(二进制),加上偏移地址
4种逻辑段
CS(代码段):存放程序的指令序列;CS存放代码段的地址,IP指示偏移地址,用CS:IP取得下一跳要执行的指令
SS(堆栈段):确定堆栈所在的主存区域;SS存放堆栈段的段地址,SP指示偏移地址;对于PUSH、POP指令,用SS:SP操作堆栈中的数据;对于随机存取堆栈中的数据,用SS:BP操作
DS(数据段):存取当前所运行程序所使用的数据,DS存放数据段的段地址,偏移地址(EA)由各种主存寻址方式得到,用DS:EA表示逻辑地址
ES(附加段):用于存取数据,串操作指令将其作为目的操作数的存放区域
数据的默认段是DS,允许在其他段存放数据,使用段超越前缀指令指明是哪个逻辑段
解释:[X]补=80H=10000000B,为负数,│X│=[[X]补]求补=10000000 B
所以X= - 80H
解释:[X]补 = 98H =10011000B,X为负数,
则[-X]补= 01101000 B,[-X]补/2= 00110100B
[X]补/2= 【[-X]补/2】求补 = 11001100B = 0CCH
解释:[X+Y]补=[X]补+[Y]补 ; [X]补=[X]原=01001110B =78
[Y]补=【83】求补 = 10101101B
所以,[X+Y]补= 11111011B=0FBH
堆栈:一个采用“先进后出”原则的数据暂存区域。使用堆栈操作指令时,利用SS:SP来寻址;对堆栈进行随机访问时,利用SS:BP来寻址。
堆栈操作的过程:在进栈指令PUSH压栈时,先将SP—2→SP,然后将要压入的字压入到SS:SP所指示的单元中;在出栈指令POP弹栈时,先将SS:SP所指示的字单元中的内容弹出来送到目标地址中,然后将SP+2→SP。
实验教程 P50 第22题 判断题
(1)mov bl ,cx 错误 (解释:两个操作数长度不匹配)
(2)mov ds ,ss 错误 (解释:段寄存器之间不能进行数据传输)
(3)mov [bx] , [di] 错误 (解释:存储器之间不能进行数据传输)
(4)mov al , [bx][si] 正确
(5)mov es , al 错误 (解释:两个操作数长度不匹配)
(6)mov ds , dx 正确
(7)mov cs , ax 错误 (解释:不能对CS进行赋值)
(8)mov bx , cs 正确
(9)mov ds , 1230H 错误 (解释:不能对段寄存器用立即数赋值)
(10)jcxz next 正确
(11)xchg bx , 3 错误 (解释:不能直接与立即数进行数据互换XCHG)
(12)pop cs 错误 (解释:不能对CS进行任何操作)
(13)mov ip , si 错误 (解释:不能直接对IP进行任何操作)
(14)push cs 错误 (解释:不能对CS进行任何操作)
(15)push bl 错误 (解释:PUSH和POP指令是对16位二进制数操作)
(16)mov [sp] , bx 错误 (解释:SP只能用于PUSH和POP指令中的寻址)
(17)mov ax , bx+3 错误 (解释:源操作数的表达式非法)
(18)mov ax , [bx+3] 正确
(19)mov bx , [bx] 正确
(20)mov bh , [bl] 错误 (解释:BL不能用作指针,因为它是8位寄存器)
(21)xchg es , ax 错误 (解释:依据XCHG指令定义,不能与段寄存器进行数据互换)
(22)lea ax , [bx+si] 正确
(23)mul 10H 错误 (解释:乘法指令的另一个操作数只能是寄存器或内存单元)
(24)imul dx , 10H 错误 (解释:乘法指令的一个操作数是默认的AX/AL)
(25)div 10 错误 (解释:除法指令的另一个操作数只能是寄存器或内存单元)
(26)idiv dx , 10H 错误 (解释:除法指令的一个操作数是默认的DX.AX/AX)
(27)shl ax , cx 错误 (解释:移位次数必须放在CL中,CL≥2)
(28)shr bx , ch 错误 (解释:移位次数必须放在CL中,CL≥2)
(29)rol bx , 20 错误 (解释:移位次数必须放在CL中,CL≥2)
(30)rcr ax , cl 正确
(31) cmp ax , 1234H 正确
(32)cmp 12H , cl 错误 (解释:源操作数不能是立即数)
实验教程 P51 第36题 判断题
(1)[ax] 错误 寄存器间接寻址方式只能用bx、bp、si、di等四个寄存器
(2) [di] 正确 寄存器间接寻址
(3) bp 错误 bp表示十六位寄存器,应改为[bp]
(4) [si+di] 错误 si和di均为变址寄存器
(5) ds 正确 寄存器寻址方式
(6) bh 正确 寄存器寻址方式
(7) [bx+bp+32] 错误 只有基址变址寻址方式,可改为相对基址变址寻址方式 [bx/bp + si/di + 32]
(8) [bl+44] 错误 bl不能作为指针寄存器用,可改为寄存器相对寻址方式 [bx+44]
(9) [cx+90] 错误 cx不能作为指针寄存器用,寄存器间接寻址方式只能用bx、bp、si、di等四个寄存器;可改为寄存器相对寻址方式 [bx\bp\si\di + 90]
(10) dx 正确 寄存器寻址
(11) bx+90h 错误,忘记加 [ ]
(12) [dx] 错误 dx不能作为指针寄存器用,寄存器间接寻址方式只能用bx、bp、si、di等四个寄存器
(13) si[100h] 正确 寄存器相对寻址方式
(14) [bx*4] 错误 寄存器做指针寄存器使用时不能做乘法运算
(15) [ax+bx*6] 错误 ax不能作为指针寄存器用
(16) [dx+90h] 错误 dx不能作为指针寄存器用,寄存器间接寻址方式只能用bx、bp、si、di等四个寄存器