01011000b36km h等于多少m sh

 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
6)串行外设接口
下载积分:1000
内容提示:6)串行外设接口
文档格式:PPT|
浏览次数:3|
上传日期: 23:06:29|
文档星级:
全文阅读已结束,如果下载本文需要使用
 1000 积分
下载此文档
该用户还上传了这些文档
6)串行外设接口
官方公共微信当前位置: >>
汇编与组成第4章5
第 4 章(5) 2.算术运算类指令算术运算类指令包括加、减、乘、除4种指令。这类指令可 以对字节、字或双字数据进行运算,参加运算的数可以是无符号 数或带符号数。由于80x86提供十进制数运算校正指令,因此参 加运算的数也可以是BCD码表示的十进制数。这类指令中既有双 操作数指令,也有单操作数指令。如前所述,双操作数指令的两 个操作
数不能同时为存储器操作数,且只有源操作数可为立即数。 单操作数指令不允许使用立即数寻址方式。(1)加法运算指令ADD(ADD) 加法 ADC(ADD with Carry) 带进位加法 INC(INCrement) 加1 XADD(eXchange and ADD) 交换并相加 ① ADD加法指令指令格式:ADD DEST,SRC指令功能:DEST ?(SRC)+( DEST),即源操作数与目的 操作数相加,其和送入目的地址中。并根据相加结果设置 FLAGS的OF、SF、ZF、AF、PF和CF标志位。该指令执行后, 源操作数保持不变。 【例4-29】 加法指令的常用格式有: ADD BX,SI ADD DA_WORD,0F8CH ADD DL,TAB[BX] ADD EAX,EDX 下面以指令“ADD DL,0A4H”为例,给出该指令的相加及 标志位设置过程。设DL的内容为0E5H:结果不为零,则ZF ? 0; 结果无溢出,则OF ? 0; 结果中有奇数个1,则PF ? 0。 需要指出,溢出位OF表示带符号数的溢出,它是根据数的符号 及其变化来设置的。而CF位可以表示无符号数的溢出。 ② ADC带进位加法指令指令格式:ADC DEST,SRC 指令功能:DEST ?(SRC)+( DEST)+ CF,即在完成两个 操作数相加的同时,将标志位CF的值加上,求出的和数送入目 的地址中;并根据相加的结果设置标志位OF、SF、ZF、AF、 PF和CF。 【例4-30】 在中实现两个双精度数的加法。有一个32 位无符号数存放在DX(高16位)、AX(低16位)中,若要加上 常数76F1A23H,则用以下指令来实现: ADD AX,1A23H ADC DX,76FH 其中第一条指令完成把16位常数加在AX中,若产生进位,则记 录在CF中。由ADC指令在完成高16位相加的同时,将低16位的 进位也加上。 ③ INC加1指令指令格式:INC DEST 指令功能:DEST ?(DEST)+ 1,即目的操作数加1后送回目 的地址中,并根据执行结果设置标志位OF、SF、ZF、AF和PF, 但不影响CF。 INC指令只有一个操作数,操作数可以是字节、字或双字, 且被当作无符号数。④ XADD交换并相加指令指令格式: XADD DEST,SRC 指令功能:TEMP ?(SRC)+(DEST) SRC ?(DEST) DEST ?(TEMP) 该指令的源操作数只能用寄存器寻址方式,目的操作数则可用寄 存器或任一种存储器寻址方式。对标志位的影响同ADD指令, 且只能用于80486及其后继机型。 【例4-31】 指令“XADD BL,DL”执行前,如果(BL)? 12H, (DL)? 02H,则指令执行后(BL)? 14H,(DL)? 12H。 (2)减法运算指令SUB(SUBtract) 减法。带借位减法。 减1。 比较。 比较并交换。 SBB(SuBtract with Borrow) DEC(DECrement)NEG(NEGate)CMP(CoMPare)求补。CMPXCHG(CoMPare and eXCHanGe)CMPXCHG8B(CoMPare and eXCHanGe 8Byte)比较并交换 8字节。 ① SUB减法指令指令格式:SUB DEST,SRC 指令功能:DEST ?(DEST)?( SRC),即完成从目的操作 数中减去源操作数,其差值送入目的地址中;并按相减结果设置 标志位OF、SF、ZF、AF、PF和CF。 【例4-32】 SUB指令的常用格式如下:SUB AL,3FHSUB BX,AX SUB DA,EDX 下面以指令“SUB AL,DAB”为例,给出该指令的相减及设置标 志位过程。设AL内容为B7H,DAB字节单元内容为A8H:结果不为零,则ZF ? 0; 结果无溢出,则OF ? 0; 结果中有偶数个1,则PF ? 1。 ② SBB带借位减法指令指令格式:SBB DEST,SRC 指令功能:DEST ?(DEST)?( SRC)? CF,即在 完成两个操作数相减的同时,还要减去借位位CF,相 减结果送入目的地址中;并设置标志位OF、SF、ZF、 AF、PF和CF。③ DEC减1指令指令格式:DEC DEST 指令功能:DEST ?(DEST)?1,即目的操作数减1后送 回目的地址中;并根据执行结果设置标志位OF、SF、ZF、 AF和PF,但不影响CF。 ④ NEG求补指令指令格式:NEG DEST 指令功能:DEST ? 0 ?( DEST),即用零减去目的操作数, 相减结果送回目的地址中;并按结果设置标志位OF、SF、ZF、 AF、PF和CF。 NEG指令属单操作数指令,操作数可以是字节、字或双字, 且被当作补码表示的带符号数。 如果字节操作数是?128、字操作数是?32768,在执行NEG指 令后,操作数不变,但溢出标志OF置1。这是由于+128或 +32768超出了8位或16位带符号数的表示范围,即产生了溢出。 如操作数为零,求负的结果仍为零,则标志位CF置0;否则CF 置 1。 【例4-34】 设AL中存放一正数:(AL)? 25H ? B。BL 中存放负数?58H的补码:(BL)? A8H ? B。可用以下 指令获得AL、BL中数的负数:NEG AL NEG BL 以上指令执行后,AL中为负数?25H的补码: (AL)? DBH ? B。 BL中则为正数:(BL)? 58H ? B。 ⑤ CMP比较指令指令格式:CMP DEST,SRC 指令功能:(DEST)?( SRC),两个操作数相减后,仅按相 减结果设置标志位OF、SF、ZF、AF、PF和CF,而不保留两数 相减的差。 CMP指令与SUB指令的不同之处是,运算结果不送回目的 地址中。因此CMP指令执行后,两个操作数都不变,只影响状 态标志位。CMP指令后往往跟着一个条件转移指令,根据比较 结果产生不同的程序分支。例如: CMP AL,BL JZ EQL CMP指令可利用所设标志位的状态来反映两个操作数的大小。 CMP指令执行后,若ZF ? 1,表示(DEST)?(SRC)。对于 无符号数,若CF ? 0,表示(DEST)≥(SRC);若CF ? 1,则 (DEST)<(SRC)。 ⑥ CMPXCHG比较并交换指令指令格式:CMPXCHG DEST,SRC 指令功能:累加器AC与(DEST)相比较,如果(AC)?( DEST),则ZF ? 1,DEST ?(SRC); 否则 ZF ? 0, AC ?(DEST)该指令只能用于80486及其后继机型。累加器可为AL、AX 或EAX寄存器。SRC只能用8位、16位或32位寄存器。DEST则 可用寄存器或任一种存储器寻址方式。该指令对其他标志位的影 响与CMP指令相同。 ⑦ CMPXCHG8B比较并交换8字节指令指令格式:CMPXCHG8B DEST指令功能: EDX:EAX与DEST相比较,如果(EDX: EAX)?( DEST), 则 ZF ? l,DEST ?(ECX:EBX) 否则 ZF ?0,EDX:EAX ?(DEST)该指令只影响ZF位,但不影响其他标志位。该指令只能用于 Pentium及其后继机型。操作数均为64位数,目的操作数必须采 用存储器寻址方式确定一个64位数。 (3)乘法运算指令MUL(unsigned MULtiple) 无符号数乘法。IMUL(sIgned MULtiple) 带符号数乘法。① MUL无符号数乘法指令指令格式:MUL 指令功能: 字节操作数 字操作数 双字操作数 SRC AX ?(AL)*(SRC) DX:AX ?(AX)*(SRC) EDX:EAX ?(EAX)*(SRC)其中(SRC)是乘法运算的一个操作数,它只能在通用寄存器或存 储单元中(不能是立即数),而另一个操作数隐含在 AL(字节乘 )、AX(字乘)或EAX(双字乘)寄存器中。 MUL指令只影响标志寄存器中CF、OF标志位。MUL指令执行 后,如果乘积的高一半为0,即AH(字节乘)、DX(字乘法)或 EAX(双字乘)全为0,则CF ? 0和OF ? 0;否则CF ?1,OF ?1( 表示AH、DX或EDX中有乘积的有效数字)。 ② IMUL带符号数乘法指令指令格式:IMUL SRC 指令功能:与MUL相同,但操作数和乘积必须是带符号数且用 补码表示,而MUL的操作数和乘积均是无符号数。执行IMUL指令后,如果乘积的高一半是低一半的符号扩展, 则CF和OF均为0;否则均为1。 【例4-35】 设(AL)? 0B4H ? ?76D,(BL)? 11H ? 17D; 执行指令“IMUL BL”后: 乘积为(AX)? 0FAF4H ? ?1292D,CF ? OF ? 1。 【例4-36】 设(AL)? 0AH ? 10D,(BL)? 11H ? 17D;执行指令“MUL BL“后:乘积为(AX)? 00AAH ? 0170D,CF ? OF ? 0。 (4)除法运算指令DIV(unsigned DIVide) 无符号数除法。 IDIV(sIgned DIVide) 带符号数除法。① DIV无符号数除法指令指令格式:DIV SRC 指令功能:将隐含存放在AX(字节除)、DX:AX(字除) 或EDX:EAX(双字除)中的被除数除以除数(SRC),除后 的商和余数送入隐含指定的寄存器中。 字节操作:AL ?(AX)/( SRC)的商 AH ?(AX)/( SRC)的余数 字操作:AX ?(DX:AX)/( SRC)的商 DX ?(DX:AX)/( SRC)的余数 双字操作:EAX ?(EDX:EAX)/( SRC)的商 EDX ?(EDX:EAX)/( SRC)的余数 DIV指令中的被除数和除数必须是无符号数,其商和余数也 是无符号数。 DIV指令对标志寄存器无有效标志结果。但是以下两种情况 之一,将产生0型中断(除法出错中断)转入除法出错中断处理。 ? ? 除数为0,即(SRC)= 0。 ? 商溢出,即(AL)中的商>0FFH,(AX)中的商>0FFFFH 或(EAX)中的商>0FFFFFFFFH。② IDIV带符号数除法指令指令格式:IDIV SRC 指令功能:与DIV相同,但操作数、商和余数必须是带符号 数且用补码表示,余数的符号与被除数的符号相同。 带符号数除法的商中,最大的正数商是+127(7FH)、 +32767(7FFFH)或+65535(7FFFFFFFH),最小的负数商是 ?127(81H)、?3H)或?601H)。同 DIV指令一样,当除数(SRC)? 0或商超出上述的最大值或最小 值时,均产生0型中断。 由于除法指令的字节操作要求被除数为16位,字操作要求被除 数为32位,双字操作要求被除数为64位,因此往往需要用符号扩展 的方法取得除法指令所需要的被除数格式。 【例 4-39 】 两个 8 位带符号数分别放在 BYTE1、BYTE2 字节存 储单元中,将BYTE1内容除以BYTE2内容,商放在QUOT字节单元中, 可用以下指令实现: MOV AL,BYTE1 CBW IDIV BYTE2 MOV QUOT,AL (5)BCD码校正指令80x86 CPU对用BCD码表示的十进制数进行运算所采用的方 法是:先用二进制数的加、减、乘、除指令对BCD码进行运算, 紧接着用BCD码校正指令对运算结果进行校正。 80x86指令系统把BCD码分为两种格式:组合型(压缩型、 装配型、PACKED)和非组合型(非压缩型、拆散型、 UNPACKED)。① 非组合型加法校正指令AAA(ASCII Adjust for Addition)指令格式:AAA 指令功能: ? 若AL中低4位的值<9,且AF ? 0,则将AL中高4位清零,AF、 CF置0。 ? 若AL中低4位的值>9,或AF ? 1,则AL(AL)+ 6,AH(AH) +1,且将AL中高4位清零,AF、CF置1。 例如从键盘直接输入两个一位十进制数,然后相加,其结果放 在AH、AL中,实现这个操作的程序段如下: MOV AH,1 ;从键盘输入一位十进制数到AL中 INT 21H MOV BL,AL MOV AH,1 ;从键盘输入另一个十进制数到AL中 INT 21H ADD AL,BL AAA 在执行ADD指令前,AL、BL中都是一位非组合型BCD码(实 际上是ASCII码表示的十进制数)。两个非组合型BCD码相加后, 再用AAA指令进行校正。这时AH、AL中分别保存十进制和数的高 位和低位,且它们也分别是非组合型BCD码形式。 ② 组合型加法校正指令DAA(Decimal Adjust for Addition)指令格式:DAA 指令功能: ? 如果AL中低4位>9或AF=1,则AL ?(AL)+ 6,AF ? 1。 ? 如果AL中高4位>9或CF=1,则AL ?(AL)+ 60H,CF ? 1。 例如实现两个4位十进制数的加法,结果存放在DX中 ,可编制如下程序段: MOV AL,78H ;低字节BCD码相加 ADD AL,56H DAA ;低字节和数校正 MOV DL,AL MOV AL,46H ;高字节BCD码相加 ADC AL,25H DAA ;高字节和数校正 MOV DH,AL ③ 非组合型减法校正指令AAS(ASCII Adjust for Subtraction)指令格式:AAS 指令功能: ? 若AL中低4位的值<9,且AF=0,则将AL中高4位清零,AF、 CF置0。 ? 若AL中低4位>9或AF ?1,则AL ?(AL)? 6和AH ?(AH)? 1,且将AL中高4位清零,CF、AF置1。④ 组合型减法校正指令DAS(Decimal Adjust for Subtraction)指令格式:DAS 指令功能: ? 若AL中低4位>9或AF ? 1,则AL ?(AL)? 6,AF ? 1。 ? 若AL中高4位>9或CF ? 1,则AL ?(AL)? 60H,CF ? 1。 3.逻辑类指令这类指令包括逻辑运算指令、位测试指令、位扫描指令和移 位指令。 (1)逻辑运算指令 逻辑运算指令共有5条,其指令格式及功能分别如下: AND逻辑与指令 指令格式:AND DEST,SRC 指令功能:DEST?(SRC)∧(DEST) OR逻辑或指令 指令格式:OR DEST,SRC 指令功能:DEST?(SRC)∨(DEST) XOR逻辑异或指令 指令格式:XOR DEST,SRC 指令功能:DEST?(SRC)?(DEST) NOT逻辑非指令 指令格式:NOT DEST 指令功能:DEST? (DEST) TEST测试指令 指令格式:TEST DEST,SRC 指令功能:(SRC)∧(DEST) 上述指令对操作数都是按位进行逻辑运算的,操作数可以 是字节、字或双字。NOT指令对标志位无影响,其余4条指令影 响的标志位是SF、ZF、PF,置CF、OF为0,AF不确定。TEST指 令与AND指令的不同之处是,运算结果不送回目的地址中。因 此TEST指令执行后,两个操作数都不变,只影响标志位。 这些指令常用于对操作数的某些位进行分离、组合或设置,例 如: AND AL,0F0H ;分离出AL中的高4位 OR AL,80H ;将AL中最高位置1 XOR AX,AX ;将AX内容清零 XOR AL,01H ;将AL中最低位变反 【例4-40】可用以下程序段实现将标志寄存器的第8位TF位 置1: PUSHF ; POP AX OR AX,100H PUSH AX POPF (2)位测试指令80386及其后继机型增加了本组指令。 BT(Bit Test) 位测试。 BTS(Bit Test and Set) 位测试并置1。 BTR(Bit Test and Reset) 位测试并置0。 BTC(Bit Test and Complement) 位测试并变反。① BT位测试指令指令格式:BT DEST,SRC 指令功能:把目的操作数中由源操作数所指定位的值送往标志 位CF。② BTS位测试并置1指令指令格式:BTS DEST,SRC 指令功能:把目的操作数中由源操作数所指定位的值送往标志 位CF,并将目的操作数中的该位置1。 ③ BTR位测试并置0指令指令格式:BTR DEST,SRC 指令功能:把目的操作数中由源操作数所指定位的值送往标志 位CF,并将目的操作数中的该位置0。④ BTC位测试并变反指令指令格式:BTC DEST,SRC 指令功能:把目的操作数中由源操作数所指定位的值送往标志 位CF,并将目的操作数中的该位变反。 本组指令影响CF值,其他标志位则无定义。 【例4-42】 指令“BT AX,4”测试AX寄存器的位4。如指令执行 前(AX)= 1234H,则指令执行后(CF)= 1;如指令执行前 (AX)= 1224H,则指令执行后(CF)= 0。 (3)位扫描指令80386及其后继机型增加了本组指令。 BSF(Bit Scan Forward) 正向位扫描。 BSR(Bit Scan Reverse) 反向位扫描。① BSF正向位扫描指令指令格式:BSF REG,SRC 指令功能:指令从位0开始自右向左扫描源操作数,目的是检索 第一个为1的位。如遇到第一个为1的位则将ZF位置0,并把该位 的位置装入目的寄存器中;如源操作数为0,则将ZF位置1,目 的寄存器无定义。 ② BSR反向位扫描指令指令格式:BSR REG,SRC指令功能:指令从最高位开始自左向右扫描源操作数,目的是 检索第一个为1的位。该指令除方向与BSF相反外,其他规定均 与BSF相同。因此它们之间的差别是BSF指令检索从低位开始第 一个出现的1,而BSR则检索从高位开始第一个出现的1。【例4-43】 BSF ECX,EAX BSR EDX,EAX如指令执行前(EAX)= H,则该数中有两个1位并出 现于位位置为29和28处。BSF执行后,(ECX)= 28D;BSR执 行后,(EDX)= 29D,ZF位应为0。 (4)移位指令移位指令可按操作数的个数分为单操作数移位指令(8条) 和双操作数移位指令(2条)。80386及其后继机型增加的双精度 移位指令就是双操作数移位指令。 SHL(SHift logical Left) 逻辑左移。 SAL(Shift Arithmetic Left) 算术左移。 SHR(SHift logical Right) 逻辑右移。 SAR(Shift Arithmetic Right) 算术右移。 ROL(ROtate Left) 循环左移。 ROR(ROtate Right) 循环右移。 RCL(Rotate Left through Carry) 带进位循环左移。 RCR(Rotate Right through Carry) 带进位循环右移。 SHLD(SHift Left Double) 双精度左移。 SHRD(SHift Right Double) 双精度右移。 ① 单操作数移位指令这种移位指令共有8条,它们可以对通用寄存器或存储单元 中的操作数进行指定移位,即一次可只移一位或按CL中的内容 规定移位次数(位数)。移位指令可分为:算术移位指令、逻辑 移位指令和循环移位指令。这8条指令有如下共同点: ? 具有相同的指令格式 OPR DEST,COUNT。 ? 每条指令都是单操作数指令,即只需一个操作数DEST。 ? DEST只能是8/16/32位通用寄存器或存储器操作数,不能是立即 数。但只有80386及其后继机型才能使用32位操作数。 ? COUNT表示移位次数 对于,移位一次,COUNT可 用常数1替代;移位多次,则必须用CL替代,CL中存放移位次 数。对于80386及其后继机型,COUNT还可以是8位立即数,可 指定1~31的移位次数。 a. 算术移位指令指令格式:算术左移指令 SAL DEST,COUNT 算术右移指令 SAR DEST,COUNT 指令功能:算术左移指令将DEST指定的8/16/32位操作数左移 COUNT次。最高位移入CF中,最低位补0,移位操作如图(a) 所示。算术右移指令将DEST指定的8/16/32位操作数右移 COUNT次。右移时,最高符号位保持不变,连同符号位依次右 移,最低位移入CF中,如图(b)所示。 算术移位指令主要用于对带符号数的移位,左移一位相当于乘 2;右移一位相当于除2。算术移位后应保持该数的符号不变。 符号位发生变化,则将OF置1 例 如 : ( AL)? B(?63 的 补 码 ) , ( BL)? B(负数? 65的补码)。以下指令将 AL、BL中的数左移一 位: SAL AL,1 SAL BL,1 以上指令执行后,(AL)? B即?126的补码,不溢出 OF ? 0,结果符合倍增关系;而(BL)? B,左移后发生 溢出,则OF ? 1,因此BL内容不再符合倍增关系。 通常算术移位指令用于实现带符号数的简单乘除运算,其执 行时间比用乘除指令短得多。 b. 逻辑移位指令指令格式:逻辑左移指令 SHL DEST,COUNT 逻辑右移指令 SHR DEST,COUNT 指令功能:将DEST指定的8/16/32位寄存器或存储器操作数移 位COUNT次。 SHL实现将操作数左移,最高位移入CF中,最低位补0, 如图(a)所示。 SHR实现将操作数右移,最低位移入CF中,最高位补0, 如图(b)所示。 c. 循环移位指令指令格式: 循环左移指令 ROL DEST,COUNT 循环右移指令 ROR DEST,COUNT 带进位循环左移指令 RCL 带进位循环右移指令 RCR DEST,COUNT DEST,COUNT指令功能:将DEST指定的8/16/32位寄存器或存储器操作数移位 COUNT次。ROL / ROR 实现将操作数循环左移/右移。RCL / RCR 实现将操作数和CF一起循环左移/右移。受影响的状态标志位:CF、OF。CF存放每次移出的位。如果移 位指令只移一位,且移位前后操作数的符号位发生变化,则将 OF置1;否则OF置0。如移位次数大于1,则OF不确定。 循环移位指令的移位操作如下图所示:当多字节或多字数据进行移位时,常用到带进位循环移位指令。 【例4-46】 由3个字构成的一个无符号数从高位到低位依次存 放在M+4,M+2,M字单元中,若要将该数右移一位,则可用以下 程序段实现: SHR M+4,1 RCR M+2,1 RCR M,1 如下图所示,SHR指令将M+4字单元的最低位移至CF中。第2 条指令RCR将CF与M+2字单元构成一个17位的数进行一次循环右 移,将M+4单元右移出的位通过CF移至M+2单元的最高位,而 M+2中的最低位又移至CF。在第3条指令执行后,就完成将3个字 的数右移一位。 ② 双操作数移位指令80386及其后继机型可以使用本组指令。a. SHLD双精度左移指令指令格式:SHLD DEST,SRC,COUNT 指令功能:将DEST指定的8/16/32位寄存器或存储器操作数左移COUNT次, 同时将SRC指定寄存器的高位依次左移到DEST的低位中,且SRC内容保持不变。 如图(a)所示。b. SHRD双精度右移指令指令格式:SHRD DEST,SRC,COUNT 指令功能:将DEST指定的8/16/32位寄存器或存储器操作数右移COUNT次, 同时将SRC指定寄存器的低位依次右移到DEST的高位中,且SRC内容保持不变。 如图(b)所示。 这是一组双操作数指令,其中DEST可以用除立即数以外的任 一种寻址方式指定字或双字操作数。SRC则只能使用寄存器寻址方 式指定与目的操作数相同长度的字或双字。COUNT用来指定移位 次数,它可以是一个8位的立即数,也可以是CL,用其内容存放移 位次数。移位次数的范围应为1~31,对于大于31的数,机器则自 动取模32的值来取代。 【例4-48】 SHLD EBX,ECX,16 如指令执行前 (EBX)? H,(ECX)? H, 则指令执行后 (EBX)? H,(ECX)? H,CF ? 0。 4.串操作类指令MOVS(MOVe String) CMPS(CoMPare String) SCAS(SCAn String) LODS(LOaD from String) STOS(STOre into String) INS(INput from port to String) OUTS(OUTput String to port)REP(REPeat) 重复。串传送。 串比较。 串扫描。 取串。 存串。 串输入。 串输出。与上述基本指令配合使用的前缀有:REPE/REPZ(REPeat while Equal/Zero) 相等/为零则重复。 REPNE/REPNZ(REPeat while Not Equal/Not Zero)不相等/不为零则重复。 (1)取串指令(Load String)指令格式:LODS 源串 LODSB ; 取字节串 LODSW ; 取字串 LODSD ; 取双字串(80386及其后继机型可用) 指令功能: 字节操作 AL ?(DS:(SI/ESI)),SI/ESI ?(SI/ESI) ? 1 字操作 AX ?(DS:(SI/ESI)),SI/ESI ?(SI/ESI) ?2 双字操作 EAX ?(DS:(SI/ESI)),SI/ESI ?(SI/ESI) 4 ? 该指令把由源变址寄存器指向的数据段中某单元(字节/字/ 双字)的内容送到AL、AX或EAX中,并根据方向标志DF和数 据类型(字节、字或双字)修改源变址寄存器的内容。若DF ? 0 表示串操作按地址递增的方向处理,则修改SI/ESI内容用“+”; 若DF ? 1表示串操作按地址递减的方向处理,则修改SI/ESI内容 用“-”。该指令也不影响标志位。 LODS指令如采用16位寻址,则源变址寄存器只能使用SI;如采用32位寻址,源变址寄存器只能使用ESI。 (2)存串指令(Store String)指令格式:STOS 目的串 STOSB ;存字节串 STOSW ;存字串 STOSD ;存双字串(80386及后继机型可用) 指令功能: 字节操作 ES:(DI/EDI)?(AL),DI/EDI ?(DI/EDI) ?1 字操作 ES:(DI/EDI)?(AX),DI/EDI ?(DI/EDI) ?2 双字操作 ES:(DI/EDI)?(EAX),DI/EDI ?(DI/EDI) ?4 该指令把AL、AX或EAX的内容存入由目的变址寄存器指向的 附加段的某个单元中,并根据DF的值及数据类型修改目的变址寄 存器的内容。该指令不影响标志位。 (3)串传送指令(Move String)指令格式:MOVS 目的串,源串 MOVSB ;字节串传送 MOVSW ;字串传送 MOVSD ;双字串传送(80386及后继机型可用) 指令功能: 字节操作 ES:(DI/EDI)?(DS:(SI/ESI)) ?1 SI/ESI ?(SI/ESI) ? 1;DI/EDI ?(DI/EDI) 字操作 ES:(DI/EDI)?(DS:(SI/ESI)) SI/ESI ?(SI/ESI) ? 2;DI/EDI ?(DI/EDI) ?2 双字操作 ES:(DI/EDI)?(DS:(SI/ESI)) SI/ESI ?(SI/ESI) ? 4;DI/EDI ?(DI/EDI) ?4 MOVS指令把由源变址寄存器指向的数据段中的一个字节 (或字,或双字)传送到由目的变址寄存器指向的附加段中的一 个字节(或字,或双字)单元中去,同时根据方向标志DF及数据 类型对源变址寄存器和目的变址寄存器进行修改。该指令不影响 标志位。 (4)串比较指令(Compare String)指令格式:CMPS 目的串,源串 CMPSB ;字节串比较 CMPSW;字串比较 CMPSD ;双字串比较(80386及其后继机型可 用) 指令功能: 字节操作 (DS:(SI/ESI))?(ES:(DI/EDI)) ? 1;DI/EDI ?(DI/EDI) ?1 SI/ESI ?(SI/ESI) 字操作 (DS:(SI/ESI))?(ES:(DI/EDI)) ?2 ? 2;DI/EDI ?(DI/EDI) SI/ESI ?(SI/ESI) 双字操作 (DS:(SI/ESI))?(ES:(DI/EDI)) ?4 SI/ESI ?(SI/ESI) ? 4;DI/EDI ?(DI/EDI) CMPS指令比较源串和目的串中的一个字节、字或双字。即: 将源变址寄存器指向数据段中的一个字节(或字,或双字)减去 目的变址寄存器指向附加段中的一个字节(或字,或双字),不 保留相减结果,但设置标志位:OF、SF、ZF、AF、PF和CF。 每比较一次,根据方向标志DF及数据类型对源变址寄存器和目 的变址寄存器进行修改。 (5)串搜索指令(Scan String)指令格式: SCAS SCASB SCASW SCASD 目的串 ;字节串搜索 ;字串搜索 ;双字串搜索指令功能: 字节操作 (AL)?( ES:(DI/EDI)); DI/EDI ?(DI/EDI) ?1 字操作 (AX)?( ES:(DI/EDI)); DI/EDI ?(DI/EDI) ?2 双字操作 (EAX)?( ES:(DI/EDI)); DI/EDI ?(DI/EDI) ?4 SCAS指令在目的串中查找AL、AX或EAX指定的内容,即: 用AL、AX或EAX的内容减去目的变址寄存器指向附加段中的一 个字节(或字,或双字),不保留相减结果,但设置标志位: OF、SF、ZF、AF、PF和CF。每查找一次,根据方向标志DF及 数据类型对目的变址寄存器进行修改。 (6)重复前缀指令(Repeat)重复前缀指令共有3条。① 指令格式:REP string primitive其中string primitive可为MOVS、STOS、LODS、INS和 OUTS指令。 指令功能: a. 如(CX/ECX)? 0,则退出REP,否则往下执行; b.(CX/ECX )?(CX/ECX)?1; c. 执行其后的串指令; d. 重复a~c步骤。 该指令中,如16位寻址,使用CX作为计数器;如32位寻址,用 ECX作为计数器。 ② 指令格式:REPE 或 REPZstring primitive string primitive其中string primitive可为CMPS和SCAS指令。 指令功能: a. 如(CX/ECX)? 0或ZF ? 0时退出,否则往下执行; b.(CX/ECX )?(CX/ECX)?1; c. 执行其后的串指令; d. 重复a~c步骤。 有关计数寄存器的规定和REP相同。与REP相比,除满足 (CX/ECX)? 0的条件可结束操作外,还增加了ZF ? 0的条件。也 就是说,在每次比较时,只要两数相等(即ZF ? 1)就继续比较, 如果遇到两数不相等时(即ZF ? 0)就提前结束操作。 ③ 指令格式:REPNEstring primitive或 REPNZstring primitive指令功能:除退出条件为(CX/ECX)? 0或ZF ? 1外,其他操作与REPE完全相同。也就是说,在每次比较时,只要两数比较 的结果不相等(即ZF ? 0),就继续执行串处理指令;如某次两 数比较相等或(CX/ECX)? 0,就结束操作。 例如:REP MOVSB 在执行这条指令之前,假设DF ? 0,(SI)? 0020H,(DI) ? 0100H,(CX)? 0030H。那么,这条带有重复前缀的串传送指 令,将把数据段从0020H开始的30H个字节传送到当前附加段以 0100H为起始地址的存储区中。如果不用串操作指令,上述传送 操作就需编制如下程序段: MOV SI,0020H MOV DI,0100H MOV CX,0030H LOP: MOV AL,[SI] MOV ES:[DI],AL INC SI REP MOVSB INC DI LOOP LOP 【例4-49】 要求从一个字符串中查找一个指定的字符,可用指令 REPNZ SCASB。 右 图表示了预置及找到后的情况。从图中可以看出,(AL)中指定的字符为 space(空格),其ASCII码为20H。 开始比较时,因(DI )指定的字符与(AL )不符合而不断往下 比较,当(DI)? 1508H时,比较结果相 符,因此ZF ? 1,在修 改(DI)值后指令停 止比较而提前结束, 此时(DI)是相匹配 字符的下一个地址; (CX)是剩下还未比 较的字符个数。所以 根据(DI)和(CX) 的值可以很方便地找 到所需查找的字符的 位置。 5.处理机控制类指令 (1)标志位操作指令80x86提供了一组设置或清除标志位的指令,它们只影响本 指令指定的标志,而不影响其他标志位。这些指令是无操作数指 令,指令中未直接给出操作数的地址,但隐含指出操作数在某个 标志位上。能直接操作的标志位有CF、IF、DF。 ① 清除进位标志指令(CLear Carry flag)CLC ;置CF ? 0。 ② 进位标志置位指令(SeT Carry flag) STC ;置CF ? 1。 ③ 进位标志取反指令(CoMplement Carry flag)CMC ;CF 取反。 ④ 清除方向标志指令(CLear Direction flag) CLD;置DF ? 0。 ⑤ 方向标志置位指令(SeT Direction flag) STD;置DF ? 1。 ⑥ 清除中断标志指令(CLear Interrupt-enable flag) CLI ; 置IF ? 0。 ⑦ 中断标志置位指令(SeT Interrupt-enable flag) STI ; 置IF ? 1。上述指令只对指定标志位操作,而不改变其余标志位。 (2)其他处理机控制指令NOP(NoOPeration)无操作。 HLT(HmLT) 停机。 ESC(ESCape) 换码。 WAIT(WAIT) 等待。 LOCK(LOCK) 封锁。 BOUND(BOUND) 界限。 ENTER(ENTER) 建立堆栈帧。 LEAVE(LEAVE) 释放堆栈帧。
4页 5财富值 五好支部标准 3页 免费 计算机汇编语言 51页 免费如要投诉违规内容...计算机组成与汇编语言 第 4 章作业 4.1 简述下列名词: (1)指令周期 [答案]...第4章 汇编语言程序设计_计算机软件及应用_IT/...答:三种基本结构指:顺序结构,选择结构、循环结构。 ...编写程序,输入 N,输出如下矩阵(设 N=5) 1 1 ...第四章 汇编语言程序格式 1、指令下列指令的错误 (...(4)MOV AX,WORD_OP1[DX] (5)MOV SAVE_WORD,...(4)结构混乱 改为: MAIN_PROC PROC FAR MAIN_...第0章 课程概述 第2章 硬件结构 第3章 指令系统 第5章 中断系统 第6章 定时...4、汇编语言缺乏通用性,程序不易移植,各种计算机都有自己的汇编语言,不同计算机...第2章 第2节(备份) 第2章 第3、4节 第3章 第1节 第5章 半导体存储器...3 每个逻辑段由若干行汇编语句组成,每行只有一条语句且不 能超过 128 个字符...第4章 汇编语言程序设计 4.1 汇编语言上机过程 4.2 汇编语言程序结构 4.3 常用...汇编语言程序例二 六、过程定义 (第五节程序设计介绍) 七、 等值定义 (第五...第1章 概述 第2章 80x86微处理器结构 第3章 寻址方式和指令系统... 第5章...汇编语言程序设计汇编语言程序设计隐藏&& 第四章习题集判断(正确的在括号画“√...汇编_第4章__汇编语言程序... 22页 5财富值如要投诉违规内容,请到百度文库投诉中心;如要提出功能问题或意见建议,请点击此处进行反馈。 ...第四章 汇编语言程序设计(assembly language programming) §4.1 汇编语言(assembly...可把存储器操作数分解成它的组成部分,如段值、段内偏移量、类型 5.合成算符...DI LOOP LOOP1 RET MAIN ENDP CSEG ENDS END START 5 第4章 汇编语言程序设计 DOS 功能调用 1. 简介 . DOS 系统启动时,DOS 层功能模块从系统盘被装入内存...
All rights reserved Powered by
copyright &copyright 。文档资料库内容来自网络,如有侵犯请联系客服。}

我要回帖

更多关于 1h㎡等于多少平方米 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信