目录
标志位的判断
题目:给出以下运算结果,求6个状态标识位的状态。
解答:
我们一个一个讲,
首先要了解每个状态位的含义,之后再关注算式中不同的区域
1. 进位标志位 (CF)
CF,英文名Carry Flag,进位标志位
置1条件:当最高位向更高位有进位,CF为1。

此题中,最高位是1与1相加,进了1位,
因此,
CF=1
2. 溢出标志位 (OF)
OF,Overflow Flag,溢出标志位
含义:[次高位向最高位的进位] 异或 [CF]。
此题中,次高位是0和1相加,再加上之前(次次高位)传过来的进位1,因此次高位的结果是0。
所以,[次高位向最高位的进位] = 1。
然后从上面的第1点,我们就知道CF = 1,
OF = [次高位向最高位的进位] 异或 [CF] = 1 ^ 1 = 0,因此
OF = 0.
总结CF和OF的意义如下:
- CF的意义:如果两个数是无符号的数,且CF = 1,说明溢出了。
- OF的意义:如果两个数是有符号的数,且OF = 1,那么结果是有溢出的。
继续看其他标志位。
3. 辅助进位 (AF)
AF,Auxiliary Carry Flag,辅助进位标志位
含义:低4位的相加是否有进位,有进位则为1.
此题0110和0100相加,结果为1010,无进位,
AF = 0
4. 奇偶标志位 (PF)
PF,Parity Flag, 奇偶标志位
如果结果(8位)中1的个数为偶数,则为1.
此题结果为10101010,有4个1,
PF = 1.
总结AF和PF:
- AF、PF只针对低8位,不在乎高8位
继续看其他标志位。
5. 符号标志位 (SF)
SF,Sign Flag,符号标志位
结果的最高位为负,则为1.
此题结果的最高位为1,说明是负数,
则
SF = 1
最后一个,
6. 零标志位 (ZF)
ZF,Zero Flag,
置1条件:结果为0
此题结果很明显不是0(如果是0,结果应该为00H),则
ZF = 0.
本题讲解完毕。
判断指令对错
MOV AX,[SI]05H 对吗
1.先判断:这个指令是对的
2. 它的功能:将SI+5字单元的内容送给AX
3. 基本格式:
MOV [BX][BP], BX 对吗
1.先判断: 错误
2. 原因:目标操作数出现了两个基址寄存器。
3. 基址加变址寻址方式:
MOV DS,1000H 对吗
1.先判断: 错误
2. 概念:DS,Data Segment。DS的内容保存了数据段的最低地址(最低地址也称为基址)。比如DS=8402H,表示数据段的基址是8402H。
3. 错误原因:数据段的最低地址(基址)是不能被这种赋值的方式修改的。
MOV DX,09H 对吗
1.先判断: 正确
2. 功能:将09H送往DX。
3. 原因:虽然09H只有8位,DX16位,它们的字长不一样,但是08H是一个数字,它前面可以无限加0,就能与DX字长统一了。
4. 简而言之,寄存器的长度是固定的,数字的长度可以无限扩充,直到和寄存器一样长。
MOV [1200], [SI] 对吗
1.先判断: 错误
2. 原因:MOV不允许两个操作数同时为存储器操作数。
3. [1200]指向寄存器中内存地址为1200的单元
IN AX,80H 对吗
1.先判断: 正确
2. 含义:从80H端口读取保存的数据,送到AX中。
包含两行指令的指令
- MOV DX,2400H
- IN AL,DX
1.先判断: 正确
2. 含义:从2400H端口读取数据,送到AL中。和上题不同的是,这次只送8位的数据。
OUT 35H,AX 对吗
1.先判断: 正确
2. 含义:把AX的值送到35H端口里。
OUT AX,35H 对吗
1.先判断: 错误
2. 原因:OUT将CPU中寄存器的值送到端口里,而不是端口的值送往CPU的寄存器。这也是它为什么叫做“OUT”。
3. 修改方案:IN AX,35H或者OUT 35H,AX
编程题



第三章练习题

第二题讲解:
XOR DX,DX;DX异或于DX,作用是将DX清零
MOV AX,1234H;AX 赋值 1234H
MOV CL,4;CL 赋值 4,这是一个计数器
ROL AX,CL;AX循环左移直到CL=0,所以AX循环左移4位,左移完后AX就等于2341H(相当于把最高位的1H放到最低位)
DEC AX;AX 减 1,AX = 2340H
MOV SP,AX;SP 被AX赋值,SP = 2340H
MOV CX,4;CX赋值4
MUL CL;
参考链接
https://www.icourse163.org/learn/kaopei-1465496162?tid=1466446448#/learn/content?type=detail&id=1246684049&cid=1272228093