当前位置:首页 > 微机原理与接口技术 期末复习总结 - 图文
微机原理与接口技术
端口40H的内容55H送入寄存器AL中 (2) 输出指令OUT
格式:OUT 端口,累加器
OUT DX,累加器
(CPU写数据到外设当中)
例:OUT 68H,AX ;(69H,68H)←(AX)
OUT DX,AL ;((DX))←(AL)
在使用间接寻址的IN/OUT指令时,要事先用传送指令把I/O端口号设置到DX寄存器 如: MOV DX,220H
IN AL,DX;将220H端口内容读入AL
如 OUT DX,AL,(AL=66H);将累加器AL中的数据字节66H,输出到DX指定的端口 3、目标地址传送指令
(1) LEA
传送偏移地址
格式:LEA reg,mem ; 将指定内存单元的偏移地址送到指定寄存器
LEA BX, [2000H] ; 把2000H单元的偏移地址送到BX,执行后BX=2000H 要求:
1) 源操作数必须是一个存储器操作数;
2) 目的操作数必须是一个16位的通用寄存器。
例:LEA BX,[SI+10H] 设:(SI)=1000H
则执行该指令后,(BX)=1010H
?注意以下二条指令差别: LEA BX,BUFFER MOV BX,BUFFER
前者表示将符号地址为BUFFER的存储单元的偏移地址取到 BX中;后者表示将BUFFER存储单元中的内容取到 BX中。
下面两条指令等效: LEA BX,BUFFER
MOV BX, OFFSET BUFFER
其中OFFSET BUFFER表示存储器单元BUFFER的偏移地址。
二者都可用于取存储器单元的偏移地址,但LEA指令可以取动态的地址,OFFSET只能取静态的地址。 (2)LDS
功能:完成一个地址指针的传送,地址指针包括段地址部分和偏移量部分。前两个字节偏移量部分送入一个16位的指针寄存器或变址寄存器,后两字节,段地址送入DS, 例如:指令“LDS SI,[2000H]”,将当前数据段2000H及2001H单元的内容送SI,同时将2002H及2003H单元的内容送DS (3)LES
功能:除将段地址送入ES外,其他与LDS指令相同 标志寄存器传送
⑴ LAHF (LOAD AH WITH FLAG)
13 / 66
微机原理与接口技术
将标志寄存器中的SF、ZF、AF、PF和CF(即低8位)传送至AH寄存器的指定位,空位没有定义。
(2)SAHF (STORE AH WITH FLAG) 将寄存器AH的指定位,送至标志寄存器的SF、ZF、AF、PF和CF位。根据AH的内容,影响上述标志位,对O、D和I无影响。 (3)PUSHF(Push flag)
将标志寄存器压入堆栈顶部,同时修改堆栈指针(此指令不影响标志寄存器) (4)POPF(Pop flag)
将堆栈顶部的一个字传送到标志寄存器中,同时修改堆栈指针 (完成出栈入栈的地址应该相同PUSHF与POPF是成对出现的,入栈指针前SP送入标志寄存器,出栈后将SP送入寄存器,看标志寄存器的值是否相同) 二、算术运算指令(会影响标志位) 1、 加法指令
(1) 不带进位的加法指令ADD 格式: ADD OPRD1,OPRD2
源操作数:8/16位通用寄存器,存储器,立即数 目的操作数:8/16位通用寄存器,存储器
ADD 寄存器,立即数
ADD AL,30 AL与立即数30相加,结果放在AL中 ADD 存储器1/寄存器1,存储器2/寄存器2 实例:
ADD AL,30H (AL与立即数30相加,结果放在AL中)
ADD SI,[BX+20H] (SI与BX+20H及BX+21H两单元组成的一个字相
加,结果放在SI中)
ADD CX,SI (SI的内容与CX的内容相加,结果放在CX中) ADD [DI],200H (立即数200H与存储器内容相加,结果放在存储器中)
?ADD指令对6个状态标志均产生影响。 例:已知(BX)=D75FH
指令 ADD BX,8046H 执行后,状态标志各是多少?
D75FH = 1110 0111 0101 1111 8046H = 1000 0000 0100 0110
1 1 11 11 0110 0111 1010 0101
结果:因为最高位有进位,故CF=1;最后8位有4个1,故PF=1;最后4位向第5位有进位,故AF=1;运算结果不全为0,故ZF=0;最高位为0,故SF=0;有溢出,故OF=1 加法指令结果存放在OPRD1 判断溢出与进位(重点?)
从硬件的角度:默认参与运算的操作数都是有符号数,当两数的符号位相同,而和的结果相异时有溢出,则OF=1,否则OF=0 (2) 带进位的加法ADC
ADC指令在形式上和功能上与ADD类似,只是相加时还要包括进位标志CF的内容,例如: ADC AL,68H ; AL←(AL)+68H+(CF) ADC AX,CX ;AX←(AX)+(CX)+(CF)
14 / 66
微机原理与接口技术
ADC BX,[DI] ;BX←(BX)+[DI+1][DI]+(CF) ADC指令一般用于16位以上的多字节数字相加 (3)加1指令INC 格式:INC reg/mem
功能:类似于C语言中的++操作:对指定的操作数加1 例: INC AL
INC SI
INC BYTE PTR[BX+4] (知道字节加1) 注:本指令不影响CF标志。 (4)非压缩BCD码加法调整指令AAA AAA指令的操作:
如果AL的低4位>9或AF=1,则: ① AL←(AL)+6,(AH)←(AH)+1,AF←1 ② AL高4位清零 ③ CF←AF
否则AL高4位清零
(5)压缩BCD码加法调整指令DAA
?两个压缩BCD码相加结果在AL中,通过DAA调整得到一个正确的压缩BCD码. ?指令操作(调整方法):
若AL的低4位>9或AF=1 则(AL)←(AL)+6,AF←1 若AL的高4位>9或CF=1 则(AL)←(AL)+60H,CF←1
?除OF外,DAA指令影响所有其它标志。 ?DAA指令应紧跟在ADD或ADC指令之后。 2、 减法指令
(1)不考虑借位的减法指令SUB 格式: SUB OPRD1,OPRD2 操作: dest←OPRD1-OPRD2
注:1.源和目的操作数不能同时为存储器操作数 2.立即数不能作为目的操作数 3.不能进行段寄存器减法 指令例子: SUB AL,60H
SUB [BX+20H],DX SUB AX,CX
(2)考虑借位的减法指令SBB
SBB指令主要用于多字节的减法。 格式: SBB dest, src
操作: dest←(dest)-(src)-(CF) 指令例子:
SBB AX,CX
SBB WORD PTR[SI],2080H
15 / 66
微机原理与接口技术
SBB [SI],DX (3)减1指令DEC
作用类似于C语言中的”--”操作符。 格式:DEC opr 操作:opr←(opr)-1 在循环程序中,该指令对地址指针和循环计数值进行修改(执行一次,减1,直到位0) 指令例子:
DEC CL
DEC WORD PTR[DI+2] 由DI+2寻址的数据段中,字存储单元内容减1 DEC SI
(4)求补指令NEG
格式: NEG opr
操作: opr← 0-(opr)(相当于用0作被减数的SUB指令一样,但进位标志为1)
对一个操作数取补码相当于用0减去此操作数,故利用NEG指令可得到负数的绝对值。 相当于: NOT opr INC opr
例:若(AL)=0FCH,则执行 NEG AL后,
(AL)=04H,CF=1 (5)比较指令CMP
格式: CMP OPRD1,OPRD2 操作: OPRD1-OPRD2
CMP也是执行两个操作数相减,但结果不送目标操作数,其结果只反映在标志位上。
有符号数,进行比较后,溢出标志位OF与符号标志位SF的值相同时,则OPRD1?OPRD2,否则OPRD1<OPRD2
无符号数,CF=0,则OPRD1?OPRD2,若CF=1,OPRD1<OPRD2 指令例子:
CMP AL,0AH CMP CX,SI
CMP DI,[BX+03]
注意:(1)目的操作数不能为立即数
(2)源操作数和目的操作数不能同时为存储器 (6)十进制调制指令
例如十进制数12,用BCD码表示0001 0010,十进制的每一位用二进制数表示(4
16 / 66
共分享92篇相关文档