




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、微机原理与接口技术运算数据的来源运算数据的来源运算结果的去向运算结果的去向执行的操作执行的操作操作码操作码操作数操作数操作数操作数操作码字段操作码字段操作数字段操作数字段快!快!立即数立即数寄存器寄存器例例3.1 MOV BL ,80HMOV AX ,0102H指令执行后的结果为:指令执行后的结果为:BL = 80H ;AX = 0102H例例3.2MOV CL , DLMOV AX , BX如果如果DL = 50H, BX = 1234H,则执行结果为则执行结果为:CL = 50H , AX = 1234H例例 3.3 MOV AX , 2000HEA2000H,如果当前,如果当前DS=14
2、92H,则操作数存储则操作数存储单元的物理地址为:单元的物理地址为:14920H2000H=16920H若若16920=9078H执行结果为执行结果为:AX= 9078HMOV AX, ES: 2000H;AXES:2000H例如:例如:MOV AL , VALUE 或或 MOV AL , VALUE VALUE也称为为存放操作数单元的也称为为存放操作数单元的符号地址符号地址。例例3.4:MOV AX , SI如果如果 DS= 3000H , SI = 2000H物理地址物理地址=30000H+2000H=32000H若若 32000H=4050H执行结果为:执行结果为: AX =4050H又
3、:又: MOV BP , AL如果如果 SS=5000H , BP=1000H 物理地址物理地址=50000H+1000H=51000H执行结果为:执行结果为: 51000H=50HMOV AX, BX;AXDS:BX例:段超越例:段超越 MOV ES:DI , AX MOV DX , DS:BP ADD AL , ES:BX SUB CS:SI , AXEA =SIDIBXBP+disp 8disp 16例例3.5:如果:如果DS=3000H , BX=1000H COUNT=1050H对于指令:对于指令:MOV CX , BX+COUNT物理地址物理地址=30000H+1000H+1050
4、H=32050H若若32050H=4030H执行后:执行后:CX=4030H以下三种指令的形式皆允许,它们完全等价:以下三种指令的形式皆允许,它们完全等价:MOV AL , BP+TABLEMOV AL , BP+TABLE MOV AL , TABLEBPMOV AX, SI+06H;AXDS:SI+06HMOV AX, 06HSI;AXDS:SI+06HSIDIBXBPEA =+MOV AX, BX+SI;AXDS:BX+SIMOV AX, BXSI;AXDS:BX+SI例例3.6: MOV BX+DI , AX若若 DS=3000H, BX=1000H, DI=1100H则则 EA=10
5、00H+1100H=2100H物理地址物理地址=30000H+2100H=32100H若若 AX = 0050H则执行结果为则执行结果为: 32100H=0050H 。指令指令: MOV AH , BPSI如果如果 BP=2000H, SI=1200H , SS=4000H物理地址物理地址=40000H+2000H+1200H=43200H若若43200H=56H则执行结果为则执行结果为: AH=56H SI DI BX BP EA =+disp8disp16MOV AX, BX+DI+6;AXDS:BX+DI+6MOV AX, 6BX+DIMOV AX, 6BXDI MOV AX , BX+
6、SI+COUNT MOV AX , COUNTBXSI MOV AX , BX+COUNTSI MOV AX , BXCOUNTSI MOV AX , BX+SICOUNT MOV AX , COUNTSIBX例例3.7 MOV AX , MASKBXSI如果如果 DS=3000H , BX=2000H , SI=1000H , MASK=0520H 物理地址物理地址 =30000H+2000H+1000H+0520H =33520H若若33520=1234H执行结果为执行结果为AX=1234H 格式:格式: MOV DST , SRC操作:操作: dst srcdst表示目的操作数,表示目的
7、操作数,src表示源操作数。表示源操作数。MOV 指令可以是字节(指令可以是字节(8位)操作,也可以是位)操作,也可以是字(字(16位)操作位)操作。例:例: MOV AX , 05H ; 字操作字操作 MOV BL , A ; 字节操作字节操作不允许不允许dst与与src同时皆为同时皆为mem 操作数操作数目的操作数目的操作数dst不允许是立即数不允许是立即数im 、段寄存段寄存器器CS和和IP不允许将立即数直接传送给段寄存器不允许将立即数直接传送给段寄存器MOV指令不影响标志位指令不影响标志位。dst src说明说明reg1reg2reg1不能是不能是IP与与CSregimreg不能是不能
8、是CS,DS,ES,SS和和IP mimregmemreg不能是不能是CS与与IPmreg例:合法指令例:合法指令MOV BX , AXMOV AX , DATA_SEGMOV DS , AXMOV AX , COUNTBXSIMOV AL , EMOV SI , DSMOV AX , DS;AXDSMOV ES , AX;ESAXDS 对段寄存器的操作不灵活对段寄存器的操作不灵活mov cl , 4;cl4,字节传送,字节传送mov dx , 0ffh;dx00ffh,字传送,字传送mov si , 200h;si0200h,字传送,字传送mov bvar , 0ah;字节传送;字节传送;假
9、设;假设bvar是一个字节变量,定义如下:是一个字节变量,定义如下:bvar db 0mov wvar , 0bh;字传送;字传送;假设假设wvar是一个字变量,定义如下:是一个字变量,定义如下:wvar dw 0明确指令是字节操作还是字操作明确指令是字节操作还是字操作以字母开头的常数要有前导以字母开头的常数要有前导0mov ah , al;ahal,字节传送,字节传送mov bvar , ch ;bvarch ,字节传送,字节传送mov ax , bx;axbx,字传送,字传送mov ds , ax;dsax,字传送,字传送mov bx , al ;bxal,字节传送,字节传送 寄存器具有明
10、确的字节和字类型寄存器具有明确的字节和字类型mov al , bx;alds:bxmov dx , bp;dxss:bp+0mov dx , bp+4;dxss:bp+4mov es , si;esds:si 不存在存储器向存储器的传送指令不存在存储器向存储器的传送指令mov si , dsmov ax , ds;axdsmov es , ax;esaxds 对段寄存器的操作不灵活对段寄存器的操作不灵活非法指令:非法指令:mov al , 050ah 修正:修正:mov ax,050ah非法指令:非法指令:mov si , dl 修正:修正:mov dh,0 mov si,dx非法指令:非法指
11、令:mov bx+si , 255修正:修正: mov byte ptr bx+si , 255 ;byte ptr 说明是字节操作说明是字节操作 ;mov word ptr bx+si , 255 ;word ptr 说明是字操作说明是字操作 mov buf2, buf1 ;非法指令,修正:;非法指令,修正:;假设;假设buf2和和buf1是两个字变量是两个字变量;mov ax , buf1;mov buf2 , ax;假设;假设buf2和和buf1是两个字节变量是两个字节变量;mov al , buf1;mov buf2 , almov ds , es;非法指令,修正:;非法指令,修正:
12、;mov ax , es ;mov ds , axmov ds , 100h ;非法指令,修正:;非法指令,修正: ;mov ax , 100h ;mov ds , ax mov cs, si;非法指令;非法指令SSSSSSSPSPSP6587658734123412空堆栈空堆栈PUSH AX : (AX) = 1234HPUSH BX : (AX) = 8765HPOP AXPUSH指令只允许是指令只允许是字字(16位)操作位)操作src可以是可以是reg16 、 mem, 但不能是但不能是im例:合法指令例:合法指令 PUSH AX PUSH DS PUSH BX例:非法指令例:非法指令
13、PUSH AL ;不允许字节操作;不允许字节操作 PUSH 0FFA2H ; src不允许是不允许是im演示演示格式:格式:POP dst操作操作:dst SP 1 , SP SP SP 2POP指令只能字指令只能字(16位位)操作操作dst可以是可以是mem,reg16,但不能是但不能是CS、IP、imPUSH,POP指令不影响标志位指令不影响标志位例:合法指令例:合法指令pop axpop wvar例:非法指令例:非法指令pop al; al为为reg8pop bvar; bvar 为为8位内存操作数位内存操作数pop ds; dst为段寄存器为段寄存器演示演示格式:格式: XCHG OP
14、R1 , OPR2操作:操作: OPR1 OPR2指令允许字或字节操作指令允许字或字节操作OPR1、OPR2是两个操作数。它们可以是是两个操作数。它们可以是reg或或mem,但二者中必有一个是寄存,但二者中必有一个是寄存器器不允许使用段寄存器和不允许使用段寄存器和IP不影响标志位不影响标志位演示演示例例3.8 XCHG BX , BP+SI如指令执行前如指令执行前 BX =6F30H, BP =0200H, SI =0046H, SS =2F00H, 2F246H=4154H。OPR2的物理地址的物理地址=2F000H+0200H+0046H =2F246H则指令执行后则指令执行后 BX =4
15、154H , 2F246H=6F30H格式:格式: XLAT src_table 或或 XLAT操作:操作: AL BX+AL src_table是表格首地址是表格首地址 (符号地址符号地址)XLAT指令用于查找代码指令用于查找代码转换前,预先要构造一个字节表格转换前,预先要构造一个字节表格表格的内容是所要查找的代码表格的内容是所要查找的代码表格的首地址提前存入表格的首地址提前存入BX寄存器寄存器需要查找的代码的序号是相对表格首地址的位移需要查找的代码的序号是相对表格首地址的位移量量, 要提前存入要提前存入AL寄存器中寄存器中该指令执行后可在该指令执行后可在AL中得到转换后的代码。中得到转换后
16、的代码。演示演示指令指令 XALT把把 F0000+0040+0F=F004FH单元的内容送单元的内容送AL寄存器寄存器执行后执行后AL=2CH例例3.9: BX=0040H, AL=0FH, DS=F000H,所建表格如下图:所建表格如下图:2C存储器存储器F0040HF004FH(BX) (AL)=0FH例例3.10 内存数据段有一内存数据段有一16进制数的进制数的ASCII码表,码表,首地址为首地址为HEX-TABLE,如图所示,欲查出第如图所示,欲查出第10个元素个元素(元素序号从(元素序号从0开始),即开始),即A的的ASCII码。指令序列码。指令序列为:为:mov bx , 0ff
17、set hex-table ; (bx) 表首址表首址mov al , 0ah ; (al) 序号(位移量)序号(位移量)xalt hex-table ; 查表转换查表转换执行后执行后, al=41h (A的的ASCII码码) 指令指令: XLAT Hex_table执行结果把执行结果把A的的ASCII码送入在码送入在AL中中, 即即AL=41H存储器存储器30H(0)31H(1)39H(9)41H(A)46H(F)Hex-tableHex-table+10Hex-table+9Hex-table+1Hex-table+15图图 16进制数的进制数的ASCII码表码表u直接寻址方式直接寻址方式
18、格式:格式: IN AL , PORT ; (字节字节)IN AX , PORT ; (字字)操作:操作: AL PORT; (字节字节)AX PORT+1, PORT; (字字)PORT是是I/O端口地址端口地址(0255)u间接寻址方式间接寻址方式格式:格式: IN AL , DX ; (字节字节) IN AX , DX ; (字字)操作:操作: AL DX ; (字节字节) AX DX+1,DX ; (字字) DX内容是内容是I/O端口地址端口地址(065535)u直接寻址方式直接寻址方式格式格式:OUT PORT , AL ; (字节字节)OUT PORT , AX ; (字字)操作:
19、操作: PORT AL ; (字节字节) PORT+1 , PORT AX ; (字字)PORT是是I/O端口地址端口地址(0255)u间接寻址方式间接寻址方式格式:格式:OUT DX , AL ; (字节字节) OUT DX , AX ; (字字)操作操作: 字节字节DX AL 字字DX+1 , DX AXDX内容是内容是I/O端口地址端口地址(065535)IN和和OUT(输入输出输入输出)指令专用于指令专用于 CPU与外设与外设(I/O端口端口)之间传送信息。之间传送信息。数据必须经由累加器数据必须经由累加器(AX或或AL)传送。传送。直接寻址方式的指令只能寻址直接寻址方式的指令只能寻址
20、256个个I/O端口端口(端口号端口号:0255或或0FFH) 。间接接寻址方式的指令可以寻址间接接寻址方式的指令可以寻址64K个个I/O端口端口(端口号端口号: 065535或或0FFFFH) 。IN和和OUT指令提供了指令提供了字字与与字节字节两种使用方式两种使用方式, 选用哪一种选用哪一种, 取决于外设端口的宽度。取决于外设端口的宽度。 例例3.11in ax , 28h mov data_word , ax(把端口(把端口28h的内容经的内容经ax传送到存储单元传送到存储单元data_word) 例例3.12 mov dx , 3fch in ax , dx(从端口(从端口03fch取
21、一个字送到取一个字送到ax寄存器)寄存器) 例例3.13 out 5 , al (从(从 al寄存器输出一个字节到端口寄存器输出一个字节到端口5)n目的地址传送指令目的地址传送指令uLEA(Load effective address)取有效地取有效地址指令址指令格式格式:LEA reg16 , mem操作操作:把源操作数的把源操作数的EA,传送到目标寄存器传送到目标寄存器reg16 中中源操作数源操作数mem必须是必须是内存内存操作数操作数reg16必须是一个必须是一个16位的通用寄存器位的通用寄存器例例3.14LEA BX , BUFFERMOV BX , BUFFER 前者是把前者是把B
22、UFFER的有效地址的有效地址EA传送给传送给BX, 后者后者把存储单元把存储单元BUFFEER的内容传送给的内容传送给BX。例例3.15LEA BX , MAXBXSI若执行前若执行前: BX=0400H, SI=003CH, MAX=0F62H则则EA=0400+003C+0F62=139EH指令执行后:指令执行后: BX=139EHuLES (Load ES with pointer) 指针送指针送ES指令指令格式:格式:LES reg16 , mem32操作:操作:reg16 mem32ES) mem32+2uLDS (Load DS with pointer) 指针送指针送DS指令指
23、令格式:格式: LDS reg16 , mem32操作:操作: reg16 mem32 DS mem32+2源操作数源操作数mem32是是32位的内存操作数。位的内存操作数。 目的操作数目的操作数reg16是是16位的通用寄存器。位的通用寄存器。指令将源操作数指定的存储器中的连续指令将源操作数指定的存储器中的连续4字节字节传传送给指定的送给指定的reg16和和DS, 低低2位字节位字节给给reg16, 高高2位字节位字节给给DS。LEA、LDS、LES三条指令不影响标志位。三条指令不影响标志位。例例3.17:LES DI , BX执行前执行前 DS=B000H , BX =O80AH , B0
24、80AH=05AEH , B080CH=4000H 执行后执行后 DI=05AEH , ES =4000H例例3.16LDS SI, 10H执行前执行前DS=C000H , SI=0010H , C0010H=0180H , C0012H=2000H执行后执行后 SI=0180H , DS=2000H 。uLAHF (Load AH with flags)标志送标志送AH指令指令格式:格式: LAHF操作:操作: AH FLAG的低字节位的低字节位只传送了只传送了SF、ZF、AF、PF、CF五个标志位五个标志位uSAHF(Store AH into flags)AH送标志寄存器送标志寄存器格式
25、:格式:SAHF操作:操作:FLAG的低字节的低字节 AH 格式:格式: PUSHF操作:操作: SP SP - 2 SP+1 , SP FLAGS格式:格式:POPF操作:操作:FLAG SP+1 , SPSP SP +2uPOPF(Pop the flags)标志出栈指令标志出栈指令LAHF和和PUSHF不影响标志位不影响标志位SAHF和和POPF由装入的值来确定标志位由装入的值来确定标志位uADD (add)加法加法格式:格式:ADD dst , src操作:操作:dst src + dstuADC (add with carry)带进位加法带进位加法格式:格式:ADC dst ,src
26、操作:操作:dst src + dst + CF uINC (increment )加加1格式:格式:INC dst操作操作 :dst dst+1dst为寄存器或存储器操作数。为寄存器或存储器操作数。src是寄存器、存储器操作数或立即数是寄存器、存储器操作数或立即数src和和dst不能同为存储器操作数不能同为存储器操作数不允许段寄存器参与运算。不允许段寄存器参与运算。允许字节操作或字操作。允许字节操作或字操作。上述指令对条件标志位产生影响,但上述指令对条件标志位产生影响,但INC指令对指令对CF位无影响。位无影响。例如:例如:add cl ,10adc dx , si add ax , mem
27、 adc alphadi , 30h inc si以上指令皆合法。以上指令皆合法。例例3.18:mov al , 7eh mov bl , 5bh add al , bl执行后,执行后,al =7eh+5bh=d9h各状态标志位为:各状态标志位为: SF=1, ZF=0 , AF=1 PF=0 , CF=0 , OF=1例例3.19:要求计算两个多字节的:要求计算两个多字节的16进制数之和:进制数之和:3B74AC60F8H+20D59E36C1H=?式中被加数和加数均有五个字节,假设它们已分式中被加数和加数均有五个字节,假设它们已分别存入从别存入从DATA1和和DATA2开始的两个内存区,且
28、均开始的两个内存区,且均为为低位字节在前,高位字节在后低位字节在前,高位字节在后,如,如图图3.8所示。要所示。要求相加所得结果仍存回以求相加所得结果仍存回以DATA1为首址的内存区。为首址的内存区。本例可用循环程序来实现。运算程序流程图见本例可用循环程序来实现。运算程序流程图见图图3.8。mov cx , 0 ; 设置循环次数设置循环次数mov si , 0 ; 置位移量初值置位移量初值clc ;清进位清进位(CF=0)looper:inc cxmov al , data2si ;取一个加数取一个加数 adc data1si , al ;和另一个加数相加和另一个加数相加inc si ;位移量
29、加位移量加1cmp cx , 5 ;循环次数减循环次数减1jnz looper ;未完未完, 转转loper 处继续处继续hlt ;程序暂停程序暂停 uSUB (subtract )减法减法格式:格式:SUB dst , src操作操作 :dst dst srcuSBB (subtract with borrow)带借位减法带借位减法格式:格式:SBB dst , src操作:操作: dst dst src CF其中,其中,CF为借位标志位的值为借位标志位的值例例3.22 SUB SI14H , 0136H指令执行前指令执行前DS =3000H, SI =0040H, 30054H =4336
30、H指令执行后指令执行后 4336H 0100 0011 0011 0110 0136H 0000 0001 0011 0110 4200H 0100 0010 0000 0000 0100 0011 0011 0110或补码相减或补码相减 1111 1110 1100 1010 10100 0010 0000 0000 所以所以30054H =4200H, SF=0, ZF=0, CF=0, OF=0 例例3.23 SUB DH , BP4指令执行前指令执行前DH = 41H , SS = 0000H,BP = 00E4H , 000E8H=5AH指令执行后指令执行后 41H 0100 000
31、1 0100 00015AH 0101 1010 1010 0110 E7H 11110 0111 1110 0111 所以所以 DH = 0E7H , SF=1, ZF=0, CF=1, OF=0uDEC (Decrement)减减1格式:格式: DEC dst操作:操作: dst dst 1uCMP (Compare)比较比较格式:格式:CMP dst , src操作:操作:dst srcCMP不保存运算结果,但影响条件标志位。不保存运算结果,但影响条件标志位。uNEG (Negate)求补求补格式:格式: NEG dst操作:操作: dst 0 dst例如若原来例如若原来AL = 0FF
32、H (-1的补码的补码)执行指令执行指令NEG AL 后后AL=01(-1的绝对值的绝对值)dst , src的意义与加法指令意义相同;的意义与加法指令意义相同;可进行可进行字节字节(8位)或位)或字字(16位)运算;位)运算;以上指令对状态标志位有影响,但以上指令对状态标志位有影响,但DEC指令指令对对CF位无影响位无影响例如例如 :SUB AL , 37H SBB CX , DX SUB ARRAYDI , AXSBB SI+6 , 97DEC BL DEC WORD PTR BPDINEG AXNEG BYTE PTRBXCMP AL , 0AHCMP BXF5 , SI皆为合法指令皆为
33、合法指令例例3.20 内存数据存放了内存数据存放了100个带符号数,首地址个带符号数,首地址为为AREA1, 要求将各数取绝对值后存入以要求将各数取绝对值后存入以AREA2为首为首址的内存区。由于址的内存区。由于100个带符号数中可能既有正数,个带符号数中可能既有正数,又有负数,因此先要判断正负。如为正数,可以原封又有负数,因此先要判断正负。如为正数,可以原封不动的传送到另一内存区;如为负数,则须先求补即不动的传送到另一内存区;如为负数,则须先求补即可得到负数的绝对值,然后再传送。程序如下:可得到负数的绝对值,然后再传送。程序如下:LEA SI,AREA1; SI 原地址指针原地址指针LEA
34、DI,AREA2; DI 目的地址指针目的地址指针MOV CX,100 ; CX 循环次数循环次数CHECK:MOV AL,SI; 取一个带符号数到取一个带符号数到ALCMP AL,0; AL内容不变内容不变, 但影响标志但影响标志JNS NEXT; 若若SF=0,则转则转NEXTNEG AL; 否则求补否则求补NEXT:MOV DI , AL; 传送到目的地址传送到目的地址INC SI; 源地址加源地址加1 INC DI; 目的地址加目的地址加1DEC CX; 循环次数减循环次数减1JNZ CHECK ; 如不等于零如不等于零, 则转则转CHECKHLT; 停止停止例例3.21 在数据段从在
35、数据段从DATA开始的存储单元中分别存放了两开始的存储单元中分别存放了两个个8位无符号数。比较他们的大小,并将大者传送到位无符号数。比较他们的大小,并将大者传送到MAX单元。单元。编程如下:编程如下:LEA BX,DATA ; DATA偏移地址送偏移地址送BXMOV AL,BX ; 第一个无符号数送第一个无符号数送ALINC BX ; BX指向第二个无符号数指向第二个无符号数CMP AL,BX ; 两数比较两数比较JNC DONE ; 如如 CF =0,则转到则转到DONEMOV AL,BX ; 否则,第二个无符号数送否则,第二个无符号数送ALDONE: MOV MAX,AL ; 较大的无符号
36、送较大的无符号送MAX单元单元HLT ; 停止停止 uIMUL(Signed Multiple)带符号数乘法带符号数乘法格式:格式: IMUL src操作:与操作:与MUL相同,但操作数是相同,但操作数是带符号数带符号数uMUL (Unsigned Multiple)无符号数乘法无符号数乘法格式:格式: MUL src操作:字节运算操作:字节运算 AX AL src 字字运算运算 DX , AX AX src 乘法指令是单操作数指令,隐含的目的操作数必乘法指令是单操作数指令,隐含的目的操作数必须是累加器须是累加器src为为寄存器寄存器或或存储器存储器操作数操作数, 不能是不能是立即数立即数可进
37、行可进行字节字节或或字字运算。运算。字节字节运算时,结果为运算时,结果为16位位,字字运算时,结果为运算时,结果为32位位。本指令对本指令对CF和和OF位有影响,对其他条件标志位为位有影响,对其他条件标志位为无定义无定义对于对于MUL指令指令, 如果乘积的如果乘积的高半部分高半部分(字节运算字节运算的的AH, 字运算时的字运算时的DX)为为0, 则则CF=OF=0, 否则否则, CF=OF=1对于对于IMUL指令指令, 如果乘积的如果乘积的高半部分高半部分仅仅是乘仅仅是乘积积低半部分低半部分的的符号扩展符号扩展, 则则CF=OF=0, 否则否则, CF=OF=1。符号扩展就是将乘积的低半部分中
38、的最高位之值符号扩展就是将乘积的低半部分中的最高位之值送入乘积的高半部分的每一位。送入乘积的高半部分的每一位。例如例如, 字节运算字节运算, 若若: AL 80H , 经符号扩展后经符号扩展后 AH=0若若: AL 80H , 符号扩展后符号扩展后 AH = FFH字运算字运算, 若若: AX 8000H , 符号扩展后符号扩展后, DX =0若若: AX 8000H , 符号扩展后符号扩展后, DX = FFFFH。8086CPU执行除法时规定:执行除法时规定:当当被除数被除数为为字字时,时,除数除数应为应为字节字节;当当被除数被除数为为双字双字位时,位时,除数除数应为应为字字。uDIV (
39、Unsigned divide)除法除法格式:格式:DIV src操作:操作:字节运算字节运算AL AX / src 的的商商AH AX / src 的的余数余数 字运算字运算 AX DX , AX / src 的的商商DX DX , AX / src 的的余数余数操作数被认为是无符号数,商和余数皆为操作数被认为是无符号数,商和余数皆为无符号数。无符号数。uIDIV (Signed divide)带符号数除法带符号数除法格式:格式: IDIV src操作:与操作:与DIV相同,但操作数被认为是相同,但操作数被认为是带符号带符号数数,商商和和余数余数也是也是带符号数带符号数src的类型与乘法指令
40、中的一样的类型与乘法指令中的一样;除法指令对条件标志为无定义(值不确定除法指令对条件标志为无定义(值不确定);若除数为若除数为0,或执行除法时,商超出范围,或执行除法时,商超出范围,CPU自动产生类型号为自动产生类型号为0的内部中断,作中断处理。的内部中断,作中断处理。uCWD 字扩展指令字扩展指令格式:格式:CWD操作:若操作:若 AX 8000H, 则则 DX 0000H, 否则否则 DX FFFFHuCBW字节扩展指令字节扩展指令格式:格式:CBW操作:若操作:若 AL 9, AF=0)0000 0110 ; 加加6调整调整 0001 0011 ; 13的的BCD码码, 正确正确 两个两
41、个4位位二进制数之二进制数之和和9, 应作应作加加6调整调整例如例如: 48+29=77 0100 1000; 48的的BCD码码 0010 1001 ; 29的的BCD码码0111 0001; 错误错误(有进位,有进位,AF=1) 0000 0110; 加加6调整调整0111 0111; 77的的BCD码,正确码,正确 两个两个4位位二进制数之二进制数之和和9 0000 0110 ; 加加6调整调整 1010 0011 ; 中间结果,中间结果,高高4位位9 0110 0000 ; 加加60H调整调整 CF1 0000 0011 ; 正确结果正确结果 CF=1加法运算后,加法运算后,低低4位位
42、9时时,调整指令需作加调整指令需作加06H调整;调整;高高4位位9时时,调整指令需作加,调整指令需作加60H调整。调整。 例如例如: 72+91=163 0111 0010 1001 0001 CF1 0000 0011 ; 中间结果中间结果, CF=1 0110 0000 ; 加加60H调整调整 0110 0011 ; 正确结果正确结果加法运算后,当加法运算后,当CF=1(有进位产生有进位产生)时,调整指令应时,调整指令应作加作加60H处理。处理。uDAA(decimal adjust for addition) 加法的加法的十进制调整十进制调整格式:格式:DAA操作操作:将:将AL中的和调
43、整成压缩的中的和调整成压缩的BCD格式。格式。调整方法:调整方法:若若 AL的的低低4位位9或或AF=1, 则则ALAL06H , AF1若若AL的的高高4位位9或或CF=1, 则则ALAL60H , CF1DAA指令之前必须先执行指令之前必须先执行ADD或或ADC指令指令加数加数和和被加数被加数都必须是都必须是2位位的的压缩压缩BCD数数和要存入和要存入AL寄存器。寄存器。 DAA指令对指令对OF无定义无定义, 但影响其他标志位。但影响其他标志位。例例3.27ADD AL , BL DAA执行前执行前, AL=28H , BL=68H执行执行ADD后后, AL=90H , AF=1, CF=
44、0和不是正确的和不是正确的BCD码形式码形式。执行执行DAA指令,因为指令,因为 AF=1, CF=0 而作调整而作调整: ALAL+06H 得到得到AL=96H , CF=0 , AF=1uDAS(decimal adjust for subtraction)减法减法的十进制调整指令的十进制调整指令格式:格式:DAS操作:把操作:把AL中的中的差差调整成调整成压缩的压缩的BCD码码格式格式调整方法:调整方法:若若 AL的的低低4位位9或或AF=1 , 则则AL AL06H , AF1 若若AL的的高高4位位9或或CF=1 , 则则AL AL60H , CF1DAS指令仅对指令仅对AL内容作调
45、整,不改变内容作调整,不改变AH的内的内容。容。在在DAS指令之前必须先执行指令之前必须先执行SUB或或SBB指令指令减数减数和和被减数被减数都必须是都必须是2位位的的压缩压缩BCD数数DAS指令对指令对OF位无影响,对其他条件标志位产位无影响,对其他条件标志位产生影响生影响。uAAA (ASCII adjust for addition)加法的加法的ASCII调整指令调整指令格式:格式:AAA操作:将操作:将AL中的和调整到非压缩的中的和调整到非压缩的BCD码格式码格式, AHAH调整产生的进位值调整产生的进位值调整方法:调整方法:若若AL 0FH 09H 或或 AF=1, 则则ALAL+0
46、6H , AHAH+1 , AF 1, CF 1 , ALAL 0FH否则否则 ALAL 0FH , CF 0 , AF 0AAA指令之前必须先执行指令之前必须先执行ADD或或ADC指令指令加数加数和和被加数被加数都必须是都必须是1位压缩位压缩BCD数数和和要存入要存入AL寄存器。寄存器。AAA指令影响指令影响AF和和CF标志,对其他标志无定义标志,对其他标志无定义例例3.30ADD AL , BLAAA如指令执行前如指令执行前,AX=0535H ( 5的的ASCII码码)BL=39H ( 9的的ASCII码码)ADD指令执行完后指令执行完后 AL = 6EH, BL=39H, AH = 05
47、H, AF=CF= 0执行执行AAA, 因因 AL0FH=0EH9H作调整:作调整: AL AL + 06H, 得得 AL =74HAH AH +1 , 得得 AH = 06HAF 1 , CF 1AL AL 0FH , 得得 AL = 04H最终结果为最终结果为AH= 06H, AL = 04H, 即即 AX = 0604H , CF=AF=1uAAS (ASCII adjust for subtraction)减法减法的的ASCII码调整指令码调整指令格式:格式: AAS操作:操作: 把把AL中的差调整到非压缩的中的差调整到非压缩的BCD码格式码格式, AH AH 调整产生的借位值。调整产
48、生的借位值。调整方法:调整方法:l若若 AL 0FH 9 或或 AF = 1 , 则则AL AL 6 , AH AH 1AF1 , CF 1 , AL AL 0FHl否则否则 AL AL 0FHAAS指令的使用要求和对标志位的影响与指令的使用要求和对标志位的影响与AAA指令类似。指令类似。uAAM(ASCII adjust for multiplication)乘法乘法的的ASCII调整指令调整指令格式:格式: AAM操作:对操作:对AL中的乘积进行调整,方法为:中的乘积进行调整,方法为:AH AL / 0AH的的商商;AL AL / 0AH的的余数余数AAM指令之前必须执行指令之前必须执行M
49、UL指令;指令;乘数乘数与与被乘数被乘数是是高高4位位为为0的的1 位位非压缩型非压缩型BCD码码对对SF, ZF和和PF位有影响,对位有影响,对AF, CF和和OF位无定义位无定义uAAD (ASCII adjust for division) 除法的除法的ASCII调整指令调整指令u格式:格式:AADu操作:操作:AL AH 0AH+ AL ; AH0AAD指令是用在指令是用在DIV指令之前,对指令之前,对AX中的被除数中的被除数进行调整;进行调整;被除数被除数是存放在是存放在AX中的中的2位位非压缩非压缩 BCD数数, 除数除数是是1位非压缩位非压缩 BCD数数,每个,每个BCD数的高数
50、的高4位全为位全为0;指令据指令据AL的结果设置的结果设置SF、ZF、PF位,对位,对OF、CF和和AF无定义无定义。共有五条:共有五条:uAND (and) 逻辑与逻辑与uOR (or ) 逻辑或逻辑或uXOR (exclusive) 异或异或uNOT (not) 逻辑非逻辑非uTEST(test) 测试测试uNOT 逻辑非指令逻辑非指令格式:格式:NOT dst操作:操作:dst dstuAND 逻辑与指令逻辑与指令格式:格式: AND dst , src操作:操作: dst dst srcuOR 逻辑或指令逻辑或指令格式:格式: OR dst , src操作操作: dst dst V s
51、rcuTEST 测试指令测试指令格式格式: TEST dst , src操作操作: dst src 结果影响状态标志位结果影响状态标志位uXOR 异或指令异或指令格式格式: XOR dst , src操作:操作: dst dst src以上指令可进行以上指令可进行字节字节或或字字操作操作dst与与src的意义与算术运算指令的类似的意义与算术运算指令的类似除除NOT指令外,其余四条指令都对条件标志位指令外,其余四条指令都对条件标志位产生影响为:产生影响为:CF=OF=0AF位位无定义无定义SF、ZF、PF据运算结果而定。据运算结果而定。例例3.35 判断一个从端口地址为判断一个从端口地址为POR
52、T的外设输入的外设输入的数据,若数据的第的数据,若数据的第1、3、5位中的任一位不为零,位中的任一位不为零,则转移到则转移到NEXT。程序段为程序段为:INAL , PORTTESTAL , 00101010BJNZNEXT . . .NEXT:uSHL/SAL 逻辑左移逻辑左移/算术左移(算术左移(shift logical left /shift arithmetic left)格式:格式: SHL/SAL dst , 1/CL 操作:将操作:将dst顺序向左移顺序向左移1位或移位或移CL寄存器中指寄存器中指定的位数,低位补定的位数,低位补00LHdstCFuSHR 逻辑右移指令逻辑右移指
53、令格式:格式:SHR dst , 1/CL0CFLHdstuSAR 算术右移指令算术右移指令格式:格式:SAR dst , 1/CLLHCFdstuROL循环左移指令循环左移指令格式:格式:ROL dst , 1/CLuROR 循环右移指令循环右移指令格式:格式:ROR dst , 1/CL LHLHdstCFLHCFdstuRCR带进位循环右移指令带进位循环右移指令格式:格式:RCR dst , 1/CLLHLHdstCFLHCFdstuRCL带进位循环左移指令带进位循环左移指令格式:格式:RCL dst, 1/CL移位和循环指令可进行移位和循环指令可进行字节字节和和字字操作操作dst可以是
54、可以是reg和和mem操作数操作数移位次数可以是移位次数可以是1或由或由CL中内容来确定中内容来确定指令对条件标志位的影响指令对条件标志位的影响移位指令移位指令:影响除:影响除AF位以外的其他标志位位以外的其他标志位循环指令循环指令:只影响:只影响CF和和OF位位对对OF位的影响仅当移为次数为位的影响仅当移为次数为1时才有意义时才有意义, 该该位设置规则为:位设置规则为:指令执行前后,指令执行前后,最高位最高位相同时相同时OF=0, 否则否则OF=1例如:以下均为移位指令的合法形式例如:以下均为移位指令的合法形式SHL BL , 1SHR WORD PTR BLOCK , CLSAR DI ,
55、 CLROL BYTE PTR DI , 1ROR BH , CLRCL AL , CLRCR WORD PTR TABLEBX , 1例如;将例如;将DX.AX中中32位数值左移一位位数值左移一位shl ax , 1rcldx , 1DXAXCF0例例3.38 要求测试要求测试AL寄存器中的第寄存器中的第5位的状态是位的状态是“0”还是还是“1”,则可利用以下指令实现:,则可利用以下指令实现:MOV CL , 5 ; CL 移位次数移位次数ROR AL , CL ; CF AL的第的第5位位JNC ZERO ; 若若CF=0, 转转ZERO : ZERO : :有有5条指令条指令uMOVS
56、(Move string) 串传送串传送uCMPS (Compare string) 串比较串比较uSCAS (Scan string) 串扫描串扫描uLODS (Load from string) 从串取从串取uSTOS (Store into string) 存入串存入串 uMOVS 串传送串传送格式:格式: REPMOVS dst-string , src-string REPMOVSB REPMOVSW操作:操作: ES: DI DS: SI SI SI 1, DI DI 1 (字节操作字节操作) SI SI 2,DI DI 2 (字操作字操作)当方向标志当方向标志DF=0时用时用“”
57、,DF=1时用时用“”。目的串在附加段,段基值在目的串在附加段,段基值在ES中中; 源串通常在数源串通常在数据段,段基值由据段,段基值由DS提供。提供。源串可以段超越,目的串则不允许源串可以段超越,目的串则不允许;在第一种格式中,应表明操作数是字还是字节,在第一种格式中,应表明操作数是字还是字节,指令中的指令中的dst和和src只提供给汇编检查之用,并不只提供给汇编检查之用,并不允许用其他寻址方式来确定操作数。允许用其他寻址方式来确定操作数。第二、三种格式则明确指定是字节或字操作,不第二、三种格式则明确指定是字节或字操作,不用写操作数。用写操作数。传送指令不影响状态标志位。传送指令不影响状态标
58、志位。方括号项方括号项REP是可选项,是可选项,REP为重复性前缀。为重复性前缀。u重复性前缀重复性前缀REP的使用的使用格式:格式: REP string primitive 其中其中 string primitive 代表串指令代表串指令(MOVS , STOS)操作:操作: 如如 CX = 0则退出则退出REP, 否则执行指令否则执行指令 CX CX 1 执行其后串指令执行其后串指令 重复重复 例例3.39 将数据段中首地址为将数据段中首地址为BUFFER1的的200个字节个字节传送到附加段首地址位传送到附加段首地址位BUFFER2的内存区中。的内存区中。用用MOV指令编程如下:指令编程
59、如下:对对DS, ES 初始化初始化LEA SI , BUFFER1; SI 源串首地址指针源串首地址指针LEA DI , BUFFER2; DI 目的串首地址指针目的串首地址指针MOV CX , 200; CX 字节串长度字节串长度AGA:; 标号,即为转移的目的地址标号,即为转移的目的地址MOV AL , SI; AL 从源串取从源串取1个字节个字节MOV ES:DI , AL; 目的串目的串 ALINC SI; 源串地址指针源串地址指针1INC DI;目的目的串地址指针串地址指针1DEC CX ; 循环次数循环次数1JNZ AGA; 未完,转移到未完,转移到AGA处继续处继续用用MOVS
60、B指令编程如下:指令编程如下:LEA SI , BUFFER1; (SI) 源串首地址指针源串首地址指针LEA DI , BUFFER2; (DI) 目的串首地址指针目的串首地址指针MOV CX , 200 ; (CX) 字节串长度字节串长度CLD; 使使DF=0,则地址自动增量则地址自动增量AGA: MOVSB ;传送传送1个字节个字节, 并地址自动并地址自动1DEC CX ; 计数计数1JNZ AGA ; 未传送完继续未传送完继续用用REP MOVSB格式编程如下:格式编程如下:对对DS, ES初始化初始化LEA SI , BUFFER1; SI 源串首地址源串首地址LEA DI , BU
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安徽省阜阳市颍州区2022-2023学年高三下学期高考第三次模拟考试思想政治试题及答案
- 2025 年小升初上海市初一新生分班考试语文试卷(带答案解析)-(部编版)
- 2025聘用合同简易样本
- 湖南省长沙市雅礼雨花中学2024-2025学年八年级下学期期末考试数学试题(含部分答案)
- 2025年吉林省吉林市中考物理一模试卷-自定义类型(含答案)
- 维修汽车服务合同范本
- 瑞士租车服务合同范本
- 铺面租房合同范本
- 特许代理销售合同范本
- 购买金戒指合同范本
- 2025山西临汾市洪洞县招聘专职社区工作者58人考试备考试题及答案解析
- 2025年事业单位工勤技能-吉林-吉林收银员二级(技师)历年参考题库含答案解析(5套)
- 2025年中国邮政集团有限公司湖北省分公司招聘笔试备考试题及参考答案详解1套
- 江苏城市规划收费标准
- 花生膜下滴灌技术
- 第4章 动车组车体检修动车组维护与检修
- 某某公司省长市长质量奖申报自述材料
- 2022年名师工作室工作计划
- 电影预算表格(双语)
- SJG 09-2020 深圳市建筑基桩检测规程
- (5个等级)任职资格素质标准库
评论
0/150
提交评论