汇编语言设计-算术运算指令

合集下载

51单片机汇编语言教程:11课单片机算术运算指令

51单片机汇编语言教程:11课单片机算术运算指令

51 实验板推荐(点击下面的图片可以进入下载资料链接)
ห้องสมุดไป่ตู้HJ-1G
HJ-3G
推荐使用慧净 51 实验板。推荐 51 学习网 淘宝网:/
除法一般会出现小数但计算机中可没法直接表达小数它用的是我们小学生还没接触到小数时用的商和余数的概念如135其商是2余数是除了以后商放在a中余数放在b中
51 单片机汇编语言教程-慧净电子会员收集整理 (全部 28 课)
51 单片机汇编语言教程:第 11 课-单片机算术运算指令
(基于 HJ-1G、HJ-3G 实验板) 不带进位位的单片机加法指令 ADD A,#DATA ;例:ADD A,#10H ADD A,direct ;例:ADD A,10H ADD A,Rn ;例:ADD A,R7 ADD A,@Ri ;例:ADD A,@R0 用途:将 A 中的值与其后面的值相加,最终结果否是回到 A 中。 例:MOV A,#30H ADD A,#10H 则执行完本条指令后,A 中的值为 40H。 下面的题目自行练习 MOV 34H,#10H MOV R0,#13H MOV A,34H ADD A,R0 MOV R1,#34H ADD A,@R1 带进位位的加法指令 ADDC A,Rn ADDC A,direct ADDC A,@Ri ADDC A,#data 用途:将 A 中的值和其后面的值相加,并且加上进位位 C 中的值。 说明:由于 51 单片机是一种 8 位机,所以只能做 8 位的数学运算,但 8 位运算的范围只有 0-255,这在实际工作中是不够的,因此就要进行扩展,一般是将 2 个 8 位的数学运算合起 来,成为一个 16 位的运算,这样,能表达的数的范围就能达到 0-65535。如何合并呢?其 实很简单,让我们看一个 10 进制数的例程: 66+78。 这两个数相加,我们根本不在意这的过程,但事实上我们是这样做的:先做 6+8(低位), 然后再做 6+7,这是高位。做了两次加法,只是我们做的时候并没有刻意分成两次加法来做 罢了,或者说我们并没有意识到我们做了两次加法。之所以要分成两次来做,是因为这两个 数超过了一位数所能表达的范置(0-9)。 在做低位时产生了进位,我们做的时候是在适当的位置点一下,然后在做高位加法是将这一 点加进去。那么计算机中做 16 位加法时同样如此,先做低 8 位的,如果两数相加产生了进 位,也要“点一下”做个标记,这个标记就是进位位 C,在 PSW 中。在进行高位加法是将这 个 C 加进去。例:1067H+10A0H,先做 67H+A0H=107H,而 107H 显然超过了 0FFH,因此 最终保存在 A 中的是 7,而 1 则到了 PSW 中的 CY 位了,换言之,CY 就相当于是 100H。 然后再做 10H+10H+CY,结果是 21H,所以最终的结果是 2107H。 带借位的单片机减法指令 SUBB A,Rn SUBB A,direct SUBB A,@Ri SUBB A,#data

汇编语言系列之汇编实现简单数学运算

汇编语言系列之汇编实现简单数学运算

汇编语⾔系列之汇编实现简单数学运算⽬录1.计算S=1+2×3+3×4+4×5+···+N(N+1)1.1设计要求:1.2设计思路:1.3程序清单:1.4程序运⾏结果及分析:2.计算N!2.1设计要求:2.2设计思路:2.3程序清单:2.4程序运⾏结果及分析:软件:emu8086语⾔:汇编语⾔(Assembly)注意:本⽂列出了两种算术运算的代码,全部代码为博主独⾃⼀⼈编写,会有瑕疵,谨慎使⽤。

1.计算S=1+2×3+3×4+4×5+···+N(N+1)1.1设计要求:设计程序,实现数学公式S=1+2×3+3×4+4×5+···+N(N+1)的算法。

数值N由加键盘输⼊,计算结果在显⽰终端输出。

设计要求:计算结果不超过⼗六位寄存器的存储能⼒,如有溢出提⽰错误。

1.2设计思路:输⼊N值然后把N给BH作为循环次数,通过循环实现乘和累加计算,结果为⼗六进制,通过除以10得到⼗进制,存⼊堆栈再依次输出。

1.3程序清单:DATA SEGMENTpkey DB 0dh,0ah,"pleas input N end by ';' :$"over DB 0AH,0DH,"overflow!",0dh,0ah,'$'result DB 0dh,0ah,'result is:','$'DAT1 DB 8 DUP(0)DATA ENDSSTACK SEGMENTSSTACK DB 100 DUP(0)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTATE:MOV AX,DATAMOV DS,AXLEA SI,DAT1 ;开辟缓冲区LEA DX,pkeyMOV AH,9INT 21H ;DOS功能调⽤,输出字符串LLP:MOV AH,1INT 21H ;DOS功能调⽤,输⼊N值SUB AL,2FHINC DX ;DX计数MOV [SI],AL ;将输⼊的数据存在SI缓冲区INC SICMP AL,0CH ;输⼊为封号结束输⼊JNZ LLPSUB SI,2CMP DX,02H ;DX不为2表⽰输⼊为两位数JNZ LLLPLLP1:MOV CX,1MOV BL,2 ;赋初始值JMP LPLLLP:MOV DI,SISUB DI,1SUB [DI],1MOV AL,10MUL [DI]ADD [SI],AX ;输⼊是两位数时⼗位乘10加个位SUB AH,AHJMP LLP1LP: MOV BH,[SI] ;把循环次数给BHMOV AL,BLINC BLMUL BL ;BL(加1)和AL(原值)相乘给AXADD CX,AX ;AX和CX相加给CX,通过循环实现累加JO OOF ;如果溢出重新输⼊CMP BH,BL ;判断是否达到N值JNZ LPMOV AX,CXMOV CX,0AHMOV BX,0LOP:MOV DX,0DIV CX ;AX表⽰的32位数除以10,商放在AX,余数放在DX INC BXADD DX,30HPUSH DX ;将余数依次压⼊栈CMP AX,0JNZ LOP ;商不为0继续除10LEA DX,resultMOV AH,9INT 21H ;DOS功能调⽤,输出字符串OUTPUT:POP DXMOV AH,2INT 21H ;DX中数据依次出栈并显⽰DEC BXJNZ OUTPUT ;出栈完成后停⽌JMP STATEOOF:LEA DX,overMOV AH,09HINT 21H ;DOS功能调⽤,溢出显⽰JMP STATECODE ENDSEND STATE1.4程序运⾏结果及分析:乘法和累加计算根据流程图⼀步步赋值即可得到,在输⼊两位数和结果转⼗进制输出时遇到了⿇烦,通过查找资料不断尝试,最终找到了简单的解决办法,即输⼊两位时移位累加,输出除以10存⼊堆栈并依次输出显⽰。

mips汇编语言指令

mips汇编语言指令

mips汇编语言指令MIPS(Microprocessor without Interlocked Pipeline Stages)是一种精简指令集(RISC)架构的计算机处理器。

它的指令集被广泛应用于各种领域,包括嵌入式系统、操作系统和编译器等。

本文将介绍一些常见的MIPS汇编语言指令。

1. 加载和存储指令MIPS提供了一系列用于数据传输的指令。

其中,lw(load word)指令用于从内存中加载一个字(32位数据)到寄存器中,sw(store word)指令用于将一个字存储到内存中。

例如,lw $t0, 0($s0)表示将从地址$s0偏移量为0的内存位置加载一个字到$t0寄存器中。

2. 算术和逻辑指令MIPS提供了一系列用于算术和逻辑运算的指令。

例如,add指令用于将两个寄存器中的值相加,并将结果存储到目标寄存器中。

而and 指令用于对两个寄存器中的值进行按位与操作,并将结果存储到目标寄存器中。

例如,add $t0, $s0, $s1表示将$s0和$s1中的值相加,并将结果存储到$t0寄存器中。

3. 分支和跳转指令MIPS提供了一系列用于控制程序流程的指令。

其中,beq(branch if equal)指令用于在两个寄存器中的值相等时跳转到目标地址。

而j (jump)指令用于无条件跳转到目标地址。

例如,beq $t0, $t1, label表示如果$t0和$t1中的值相等,则跳转到标签为label的位置。

4. 移位指令MIPS提供了一系列用于移位操作的指令。

其中,sll(shift left logical)指令用于将一个寄存器中的值左移指定的位数,并将结果存储到目标寄存器中。

例如,sll $t0, $s0, 2表示将$s0中的值左移2位,并将结果存储到$t0寄存器中。

5. 系统调用指令MIPS提供了一系列用于进行系统调用的指令。

其中,syscall指令用于触发系统调用,并根据不同的系统调用号执行相应的操作。

常用汇编指令

常用汇编指令

常用汇编指令汇编语言是一种低级机器语言的抽象表示,通过使用汇编指令可以编写出与硬件相关的程序。

在计算机科学领域中,汇编指令是非常重要的,是理解计算机底层原理和实现的关键。

本文将介绍一些常用的汇编指令,以帮助读者更好地理解和应用这些指令。

一、数据传输指令1. MOV指令:MOV指令用于将数据从一个位置复制到另一个位置。

例如,MOV AX, BX将寄存器BX的内容复制到AX中。

2. LEA指令:LEA指令用于将内存地址加载到寄存器中。

例如,LEA BX, [SI+10]将[S1+10]的内存地址加载到寄存器BX中。

3. PUSH指令:PUSH指令用于将数据压入栈中。

例如,PUSH AX将AX中的数据压入栈中。

4. POP指令:POP指令用于从栈中弹出数据。

例如,POP BX将栈中的数据弹出到BX中。

二、算术运算指令1. ADD指令:ADD指令用于将两个操作数相加,并将结果存储在目标操作数中。

例如,ADD AX, BX将BX的值加到AX中。

2. SUB指令:SUB指令用于将源操作数的值从目标操作数中减去,并将结果存储在目标操作数中。

例如,SUB AX, BX从AX中减去BX的值。

3. MUL指令:MUL指令用于将源操作数与累加器中的值相乘,并将结果存储在累加器中。

例如,MUL BX将累加器的值与BX相乘。

4. DIV指令:DIV指令用于将累加器的值除以源操作数,并将商存储在累加器中,余数存储在另一个寄存器中。

例如,DIV BX将累加器的值除以BX。

三、逻辑运算指令1. AND指令:AND指令用于对两个操作数进行逻辑与运算,并将结果存储在目标操作数中。

例如,AND AX, BX将AX与BX进行逻辑与操作。

2. OR指令:OR指令用于对两个操作数进行逻辑或运算,并将结果存储在目标操作数中。

例如,OR AX, BX将AX与BX进行逻辑或操作。

3. NOT指令:NOT指令用于对操作数进行逻辑非运算,并将结果存储在目标操作数中。

汇编语言指令功能总结

汇编语言指令功能总结

汇编语言指令功能总结汇编语言是一种低级语言,主要用于编写机器码指令的程序。

在计算机科学领域中,汇编语言是非常重要的,因为它可以直接操作计算机的硬件资源。

本文将对汇编语言中常用的指令功能进行总结。

1. 数据传输指令数据传输指令用于将数据从一个位置传送到另一个位置。

常用的数据传输指令包括MOV(将数据从一个位置复制到另一个位置)、XCHG(交换两个位置的数据)、PUSH(将数据压入堆栈)、POP (将数据从堆栈中弹出)等。

2. 算术运算指令算术运算指令用于执行各种算术运算,例如加法、减法、乘法和除法。

常用的算术运算指令包括ADD(将两个数相加)、SUB(将一个数减去另一个数)、MUL(将两个数相乘)、DIV(将一个数除以另一个数)等。

3. 逻辑运算指令逻辑运算指令用于执行各种逻辑运算,例如与、或、非和异或。

常用的逻辑运算指令包括AND(对两个数执行与运算)、OR(对两个数执行或运算)、NOT(对一个数执行非运算)、XOR(对两个数执行异或运算)等。

4. 控制转移指令控制转移指令用于实现程序的跳转和循环执行。

常用的控制转移指令包括JMP(无条件跳转到指定的地址)、JZ(如果前一个运算结果为零则跳转)、JC(如果前一个运算结果进位则跳转)等。

5. 位操作指令位操作指令用于对数据的位进行操作。

常用的位操作指令包括AND(将两个数的对应位执行与运算)、OR(将两个数的对应位执行或运算)、NOT(取反操作)等。

6. 字符串操作指令字符串操作指令用于对字符串进行操作。

常用的字符串操作指令包括MOVSB(将一个字节从源地址复制到目的地址)、LODSB(将一个字节从源地址加载到AL寄存器)、STOSB(将AL寄存器中的值存储到目的地址)等。

7. 输入输出指令输入输出指令用于与计算机的输入输出设备进行交互。

常用的输入输出指令包括IN(从指定的端口读取数据)、OUT(将数据发送到指定的端口)等。

总结:汇编语言中的指令功能丰富多样,可以实现各种复杂的操作。

32位汇编语言学习笔记3leal和算术运算指令

32位汇编语言学习笔记3leal和算术运算指令

32位汇编语言学习笔记3leal和算术运算指令32位汇编语言学习笔记在学习汇编语言的过程中,我们已经了解了一些基本指令和寄存器的用法。

本文将继续介绍两个重要的指令:leal指令和算术运算指令。

通过深入了解和学习这两个指令,我们将更好地理解和掌握汇编语言编程的技巧和方法。

一、leal指令leal指令用于将一个有效地址(Effective Address,EA)加载到目标操作数中。

它的一般格式为:leal Source, Destination。

在这个指令中,Source表示源操作数,可以是寄存器、内存或立即数。

Destination表示目标操作数,只能是寄存器。

leal指令在源操作数的基础上进行计算,将计算结果存储到目标操作数中。

下面是一些leal指令的示例:1. leal (%eax,%ebx,4), %edx这条指令将地址(%eax + %ebx * 4)的结果存储到%edx寄存器中。

其中,%eax是个基址寄存器,%ebx是个变址寄存器,4表示缩放因子。

2. leal -8(%ebp), %ecx这条指令将地址(%ebp - 8)的结果存储到%ecx寄存器中。

其中,%ebp是个基址寄存器,-8是个偏移量。

需要注意的是,leal指令只能进行地址计算,并将结果存储到目标操作数中,不能进行实际的加载操作。

二、算术运算指令在汇编语言中,算术运算指令主要用于进行数值的计算和操作。

常见的算术运算指令包括add、sub、mul、div等。

这些指令可以对数据寄存器和内存中的数据进行四则运算。

下面是一些常用的算术运算指令及其示例:1. add指令:用于将两个操作数相加,并存储结果到目标操作数中。

一般格式为:add Source, Destination。

示例:add %eax, %ebx这条指令将%eax和%ebx寄存器中的值相加,结果存储到%ebx中。

2. sub指令:用于将第一个操作数减去第二个操作数,并将结果存储到目标操作数中。

汇编语言

汇编语言
练习:
MOV 23H,#30H
MOV 12H,#34H MOV R0,#23H MOV R7,#22H MOV R1,12H; MOV A,@R0; r1=? a=?
MOV 34H,@R1; 34h=? MOV DPTR,#6712H MOV 12H,DPH; 12h=? MOV R0,DPL; MOV A,@R0; r0=? a=?
LOOP: ADD INC
R0, #0FF
A, DPTR R1
;1机器周期
;1机器周期 ;2机器周期
DJNZ
RET
R0, LOOP
;2机器周期
;2机器周期
结果:定时时间 =▁▁▁▁▁
六、控制转移类指令
子程序调用:
概念:子程序(c中叫函数),调用。
1)acall/lcall addr11/addr16 区别在于访问的范围:一个是2k一个是64k; 2)ret
三、算术运算类指令
十进制调整:
例: mov a,#23h
add a,#18h; a=? da a; a=?
note: DA指令将十六进制的加法结果调整为BCD码加 法的结果。
四、逻辑运算&位运算
逻辑运算:0-1表示true-false
1)与: anl
2)或: rol 3)异或:xrl 4)非: cpl
xchd a,@r0;
寻址方式
寻址方式: (操作数如何取得的问题) 上述提到了类似的指令:
1)mov a,#30h 2)mov a,30h 3)mov a,r0 4)mov c,30h 5)movc a,@a+dptr
对应的寻址方式是: 1)立即数寻址;2)直接寻址;3)寄存器寻址; 4)位寻址;5)变址寻址;

riscv汇编语言指令

riscv汇编语言指令

riscv汇编语言指令
RISC-V(精简指令集计算机)是一种基于开放标准的指令集架
构(ISA),它的汇编语言指令集包括以下几类指令:
1. R 型指令,R 型指令用于执行寄存器之间的操作,包括算术
运算和逻辑运算。

例如,add、sub、and、or、xor 等。

2. I 型指令,I 型指令用于执行立即数和寄存器之间的操作,
包括加载、存储和分支操作。

例如,addi、lw、sw、beq 等。

3. S 型指令,S 型指令用于执行立即数偏移量和寄存器之间的
存储操作。

例如,sb、sh、sw。

4. B 型指令,B 型指令用于执行分支操作。

例如,beq、bne、blt、bge。

5. U 型指令,U 型指令用于执行无条件跳转和加载立即数操作。

例如,lui、auipc。

6. J 型指令,J 型指令用于执行无条件跳转操作。

例如,jal。

以上是 RISC-V 汇编语言指令的一些基本类型,每种类型的指令都有特定的操作码和功能码,通过这些指令可以完成对寄存器、内存和控制流的操作。

除了基本指令外,RISC-V 还支持特权指令、浮点指令和原子操作等扩展指令集,以满足不同应用领域的需求。

希望这些信息能够帮助你对 RISC-V 汇编语言指令有一个初步的了解。

汇编语言的基本语法

汇编语言的基本语法

汇编语言的基本语法在计算机科学领域中,汇编语言是一种低级语言,用于编写计算机程序。

它直接操作计算机硬件,比高级语言更接近计算机底层。

汇编语言的使用需要对其基本语法有一定的了解。

本文将介绍汇编语言的基本语法,以帮助读者更好地理解和使用这种语言。

一、数据传送指令在汇编语言中,数据传送是最基本的操作之一。

它用于将一个数据从一个位置传送到另一个位置。

数据传送指令由源操作数和目的操作数组成,示例如下:MOV 目的操作数,源操作数其中,目的操作数是要传送数据的目标位置,源操作数是数据的来源位置。

例如,将一个常量值传送给寄存器AX的指令可以写成:MOV AX,1000H这条指令将十六进制常量1000H传送给寄存器AX。

二、算术指令在汇编语言中,算术指令用于对数据进行算术运算。

常见的算术运算包括加法、减法、乘法和除法。

以下是一些常用的算术指令示例:ADD 目的操作数,源操作数 ; 相加SUB 目的操作数,源操作数 ; 相减MUL 目的操作数,源操作数 ; 乘法DIV 目的操作数,源操作数 ; 除法其中,目的操作数是要进行运算的操作数存储位置,源操作数是用于运算的数据来源。

三、跳转指令在程序执行过程中,跳转指令用于改变程序的执行顺序。

它根据条件选择不同的路径执行,或者直接跳转到指定的地址。

常见的跳转指令有以下几种形式:JMP 目标地址 ; 无条件跳转JE 目标地址 ; 相等时跳转JNE 目标地址 ; 不相等时跳转JG 目标地址 ; 大于时跳转JGE 目标地址 ; 大于等于时跳转JL 目标地址 ; 小于时跳转JLE 目标地址 ; 小于等于时跳转这些指令根据前面的条件判断进行跳转。

四、循环指令在汇编语言中,循环指令用于重复执行一段程序。

常见的循环指令有以下两种形式:LOOP 目标地址 ; 循环指令,计数器减1并跳转JCXZ 目标地址 ; 循环指令,计数器为0时跳转这些指令根据指定的条件进行重复执行,直到条件不满足为止。

汇编指令大全

汇编指令大全

汇编指令大全1. 引言汇编语言是一种基于计算机硬件体系结构的低级语言。

它用于编写与硬件交互的程序,并且具有直接访问计算机底层硬件的能力。

汇编指令是汇编语言中的基本操作指令,用于执行各种计算机操作,如数据传输、算术运算和逻辑运算等。

本文将为您介绍一些常见的汇编指令。

2. 数据传输指令数据传输指令用于在寄存器之间或内存和寄存器之间传输数据。

2.1 MOV - 数据传送指令mov是最常见的数据传送指令之一。

它用于将数据从一个源操作数传送到一个目的操作数。

mov destination, source其中,destination是目的操作数,source是源操作数。

这两个操作数可以是寄存器、内存地址或立即数。

2.2 LEA - 加载有效地址指令lea指令用于加载一个有效地址到一个目的操作数。

lea destination, source其中,destination是目的操作数,通常为一个寄存器,source是一个内存地址。

3. 算术运算指令算术运算指令用于执行加法、减法、乘法和除法等算术运算。

3.1 ADD - 加法指令add指令用于将两个操作数相加,并将结果存储在目的操作数中。

add destination, source其中,destination是目的操作数,source是源操作数。

这两个操作数可以是寄存器或内存地址。

3.2 SUB - 减法指令sub指令用于将第二个操作数从第一个操作数中减去,并将结果存储在目的操作数中。

sub destination, source其中,destination是目的操作数,source是源操作数。

这两个操作数可以是寄存器或内存地址。

3.3 MUL - 乘法指令mul指令用于将两个操作数相乘,并将结果存储在目的操作数中。

其中,destination是目的操作数,source是源操作数。

这两个操作数可以是寄存器或内存地址。

3.4 DIV - 除法指令div指令用于将目的操作数除以源操作数,并将商存储在目的操作数中,余数存储在另一个寄存器中。

汇编语言设计算术运算指令

汇编语言设计算术运算指令

汇编语言设计算术运算指令汇编语言是一种低级语言,它与计算机硬件直接相关,用于编写底层程序。

在汇编语言中,设计算术运算指令是非常重要的,因为这些指令能够执行基本的数学运算,并且是编写其他复杂指令的基础。

本文将介绍汇编语言中的算术运算指令的设计方法和实现原理。

一、加法指令加法是最基本的数学运算之一,也是计算机中最常用的运算之一。

在汇编语言中,加法指令用于将两个操作数相加,并将结果存储到指定的目的地。

下面是一个示例程序,演示了如何使用加法指令:```MOV AX, 5 ; 将操作数5移动到寄存器AXADD AX, 3 ; 将寄存器AX中的值与操作数3相加```在这个示例中,我们首先将操作数5移动到寄存器AX中,然后使用ADD指令将寄存器AX中的值与操作数3相加。

最后的结果将存储在寄存器AX中。

二、减法指令减法是另一种常见的数学运算,它用于计算两个数之间的差值。

在汇编语言中,减法指令类似于加法指令,可以通过指定操作数和目的地来实现减法运算。

下面是一个示例程序,演示了如何使用减法指令:```MOV AX, 7 ; 将操作数7移动到寄存器AXSUB AX, 2 ; 将寄存器AX中的值减去操作数2```在这个示例中,我们首先将操作数7移动到寄存器AX中,然后使用SUB指令将寄存器AX中的值减去操作数2。

最后的结果将存储在寄存器AX中。

三、乘法指令乘法是将两个数相乘得到积的运算。

在汇编语言中,乘法指令用于实现乘法运算,并将结果存储到指定的目的地。

下面是一个示例程序,演示了如何使用乘法指令:```MOV AX, 4 ; 将操作数4移动到寄存器AXMOV BX, 2 ; 将操作数2移动到寄存器BXMUL BX ; 将寄存器AX中的值与寄存器BX中的值相乘```在这个示例中,我们首先将操作数4移动到寄存器AX中,然后将操作数2移动到寄存器BX中。

接着使用MUL指令将寄存器AX中的值与寄存器BX中的值相乘。

最后的结果将存储在寄存器AX中。

汇编指令(常用指令)

汇编指令(常用指令)

汇编指令百科名片汇编指令是汇编语言中使用的一些操作符(如mov,inc,loop)和助记符,还包括一些伪指令(如assume,end)。

用于告诉汇编程序如何进行汇编的指令,它既不控制机器的操作也不被汇编成机器代码,只能为汇编程序所识别并指导汇编如何进行。

目录编辑本段一、数据传输指令它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据。

1. 通用数据传送指令MOV 传送字或字节.MOVSX 先符号扩展,再传送.MOVZX 先零扩展,再传送.PUSH 把字压入堆栈.POP 把字弹出堆栈.PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈.POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈.PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈.POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈.BSWAP 交换32位寄存器里字节的顺序XCHG 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数) CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX )XADD 先交换再累加.( 结果在第一个操作数里)XLAT 字节查表转换.── BX 指向一张256 字节的表的起点, AL 为表的索引值(0-255,即0-FFH); 返回AL 为查表结果. ( [BX+AL]->AL )2. 输入输出端口传送指令.IN I/O端口输入. ( 语法: IN 累加器, {端口号│DX} )OUT I/O端口输出. ( 语法: OUT {端口号│DX},累加器)输入输出端口由立即方式指定时, 其范围是0-255; 由寄存器DX 指定时, 其范围是0-65535.3. 目的地址传送指令.LEA 装入有效地址.例: LEA DX,string ;把偏移地址存到DX.LDS 传送目标指针,把指针内容装入DS.例: LDS SI,string ;把段地址:偏移地址存到DS:SI.LES 传送目标指针,把指针内容装入ES.例: LES DI,string ;把段地址:偏移地址存到ES:DI.LFS 传送目标指针,把指针内容装入FS.例: LFS DI,string ;把段地址:偏移地址存到FS:DI.LGS 传送目标指针,把指针内容装入GS.例: LGS DI,string ;把段地址:偏移地址存到GS:DI.LSS 传送目标指针,把指针内容装入SS.例: LSS DI,string ;把段地址:偏移地址存到SS:DI.4. 标志传送指令.LAHF 标志寄存器传送,把标志装入AH.SAHF 标志寄存器传送,把AH内容装入标志寄存器.PUSHF 标志入栈.POPF 标志出栈.PUSHD 32位标志入栈.POPD 32位标志出栈.编辑本段二、算术运算指令ADD 加法.ADC 带进位加法.INC 加 1.AAA 加法的ASCII码调整.DAA 加法的十进制调整.SUB 减法.SBB 带借位减法.DEC 减 1.NEC 求反(以0 减之).CMP 比较.(两操作数作减法,仅修改标志位,不回送结果).AAS 减法的ASCII码调整.DAS 减法的十进制调整.MUL 无符号乘法.IMUL 整数乘法.以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算), AAM 乘法的ASCII码调整.DIV 无符号除法.IDIV 整数除法.以上两条,结果回送:商回送AL,余数回送AH, (字节运算);或商回送AX,余数回送DX, (字运算).AAD 除法的ASCII码调整.CBW 字节转换为字. (把AL中字节的符号扩展到AH中去)CWD 字转换为双字. (把AX中的字的符号扩展到DX中去)CWDE 字转换为双字. (把AX中的字符号扩展到EAX中去)CDQ 双字扩展. (把EAX中的字的符号扩展到EDX中去)编辑本段三、逻辑运算指令AND 与运算.or 或运算.XOR 异或运算.NOT 取反.TEST 测试.(两操作数作与运算,仅修改标志位,不回送结果).SHL 逻辑左移.SAL 算术左移.(=SHL)SHR 逻辑右移.SAR 算术右移.(=SHR)ROL 循环左移.ROR 循环右移.RCL 通过进位的循环左移.RCR 通过进位的循环右移.以上八种移位指令,其移位次数可达255次.移位一次时, 可直接用操作码. 如SHL AX,1.移位>1次时, 则由寄存器CL给出移位次数.如MOV CL,04SHL AX,CL编辑本段四、串指令DS:SI 源串段寄存器:源串变址.ES:DI 目标串段寄存器:目标串变址.CX 重复次数计数器.AL/AX 扫描值.D标志0表示重复操作中SI和DI应自动增量; 1表示应自动减量.Z标志用来控制扫描或比较操作的结束.MOVS 串传送.( MOVSB 传送字符. MOVSW 传送字. MOVSD 传送双字. )CMPS 串比较.( CMPSB 比较字符. CMPSW 比较字. )SCAS 串扫描.把AL或AX的内容与目标串作比较,比较结果反映在标志位.LODS 装入串.把源串中的元素(字或字节)逐一装入AL或AX中.( LODSB 传送字符. LODSW 传送字. LODSD 传送双字. )STOS 保存串.是LODS的逆过程.REP 当CX/ECX<>0时重复.REPE/REPZ 当ZF=1或比较结果相等,且CX/ECX<>0时重复.REPNE/REPNZ 当ZF=0或比较结果不相等,且CX/ECX<>0时重复.REPC 当CF=1且CX/ECX<>0时重复.REPNC 当CF=0且CX/ECX<>0时重复.编辑本段五、程序转移指令1>无条件转移指令(长转移)JMP 无条件转移指令CALL 过程调用RET/RETF过程返回.2>条件转移指令(短转移,-128到+127的距离内)( 当且仅当(SF XOR OF)=1时,OP1<OP2 )JA/JNBE 不小于或不等于时转移.JAE/JNB 大于或等于转移.JB/JNAE 小于转移.JBE/JNA 小于或等于转移.以上四条,测试无符号整数运算的结果(标志C和Z).JG/JNLE 大于转移.JGE/JNL 大于或等于转移.JL/JNGE 小于转移.JLE/JNG 小于或等于转移.以上四条,测试带符号整数运算的结果(标志S,O和Z).JE/JZ 等于转移.JNE/JNZ 不等于时转移.JC 有进位时转移.JNC 无进位时转移.JNO 不溢出时转移.JNP/JPO 奇偶性为奇数时转移.JNS 符号位为"0" 时转移.JO 溢出转移.JP/JPE 奇偶性为偶数时转移.JS 符号位为"1" 时转移.3>循环控制指令(短转移)LOOP CX不为零时循环.LOOPE/LOOPZ CX不为零且标志Z=1时循环.LOOPNE/LOOPNZ CX不为零且标志Z=0时循环.JCXZ CX为零时转移.JECXZ ECX为零时转移.4>中断指令INT 中断指令INTO 溢出中断IRET 中断返回5>处理器控制指令HLT 处理器暂停, 直到出现中断或复位信号才继续.WAIT 当芯片引线TEST为高电平时使CPU进入等待状态. ESC 转换到外处理器.LOCK 封锁总线.NOP 空操作.STC 置进位标志位.CLC 清进位标志位.CMC 进位标志取反.STD 置方向标志位.CLD 清方向标志位.STI 置中断允许位.CLI 清中断允许位.编辑本段六、伪指令DW 定义字(2字节).PROC 定义过程.ENDP 过程结束.SEGMENT 定义段.ASSUME 建立段寄存器寻址.ENDS 段结束.END 程序结束.七、处理机控制指令:标志处理指令CLC(进位位置0指令)CMC(进位位求反指令)STC(进位位置为1指令)CLD(方向标志置1指令)STD(方向标志位置1指令)CLI(中断标志置0指令)STI(中断标志置1指令)NOP(无操作)HLT(停机)WAIT(等待)ESC(换码)LOCK(封锁)。

汇编语言指令英文全称

汇编语言指令英文全称

汇编指令英文全称1.通用数据传送指令MOV----> moveMOV dest,src ;dest←srcMOV指令把一个字节或字的操作数从源地址src传送至目的地址dest。

MOVSX---->extended move with sign dataMOVZX---->extended move with zero dataPUSH---->pushPOP---->pop进栈出栈指令PUSHA---->push allPOPA---->pop allPUSHAD---->push all dataPOPAD---->pop all dataBSWAP---->byte swapXCHG---->exchange交换指令用来将源操作数和目的操作数内容交换,操作数可以是字、也可以是字节,可以在通用寄存器与通用寄存器或存储器之间对换数据,但不能在存储器与存储器之间对换数据。

mov ax,1234h ;ax=1234hmov bx,5678h ;bx=5678hxchg ax,bx ;ax=5678h,bx=1234hxchg ah,al ;ax=7856hCMPXCHG---->compare and changeXADD---->exchange and addXLAT---->translate换码指令用于将BX指定的缓冲区中、AL指定的位移处的数据取出赋给AL。

2.输入输出端口传送指令IN---->inputOUT---->output3.目的地址传送指令LEA---->load effective addres有效地址传送指令mov bx,0400hmov si,3chlea bx,[bx+si+0f62h] ;BX=139EH这里BX得到的是主存单元的有效地址,不是物理地址,也不是该单元的内容。

汇编语言设计-算术运算指令

汇编语言设计-算术运算指令

N
传完否?
JNZ AGAIN ;CX≠0,循环
Y
结束

8086算术运算指令可用的BCD码有两种:
ⅰ、组合BCD码:一个字节表示2位BCD码
ⅱ、非组合BCD码:一个字节只用低4位表示1位BCD 码, 高4位为0(无意义)。
例:设(AL)=35,(BL)=39 35H 0011 0101
执行 ADD AL,BL
JNS NEXT
;若SF=0,则(AX)>(BX),转NEXT
XCHG AX,BX ;否则交换
NEXT:HLT
Ⅱ、两负数比较,即A<0,B<0:两负数相减,结果也不会溢出,
仍可用符号标志,若SF=0,则A>B;反之若SF=1,则A<B。
Ⅲ、两异号数比较。当A>0,B<0时,当然的结果应该是A>B,
而且有SF=0。
格式:ADD dest,src ;dest←dest+src
功能:将源操作数与目的操作数相加,将结果送回目的操 作数。指令执行后对各状态标志均产生影响。
例:ADD CX,0F0F0H 设指令执行前(CX)=5463H
0101 0100 0110 0011
思考:
+ 1111 0000 1111 0000
LEA SI,BUF1 ;SI指向BUF1 LEA DI,BUF2 ;DI指向BUF2
取数 传送
MOV CX,100 ;CX放计数初值
AGAIN:MOV AL,[SI] ;取一字节数 MOV [DI],AL ;传送一字节数
修改地址指针 修改计数器
INC SI INC DI DEC CX
;修改地址指针 ;修改计数初值
NEG指令是对指令中的操作数取补,再将结果送回。因 对一个操作数求2的补码,相当于0减去此操作数,所以NEG 指令执行的也是减法操作。

汇编语言常用语句一览

汇编语言常用语句一览

汇编语言常用语句一览在学习和使用汇编语言时,熟悉常用的语句和指令是非常重要的。

本文将列举出一些汇编语言中常用的语句,以供参考和学习。

1. 数据传输指令MOV:将源数据移动到目标操作数中PUSH:将数据压入栈中POP:将栈顶元素弹出2. 算术运算指令ADD:将源数据与目标操作数相加SUB:将源数据与目标操作数相减INC:目标操作数自增1DEC:目标操作数自减1MUL:将源数据与目标操作数相乘DIV:将源数据与目标操作数相除3. 条件跳转指令JMP:无条件跳转到指定地址JZ/JNZ:根据零标志位是否为零跳转JE/JNE:根据相等标志位是否为真跳转JL/JLE:根据小于/小于等于标志位是否为真跳转JG/JGE:根据大于/大于等于标志位是否为真跳转4. 循环指令LOOP:循环指令,根据计数寄存器的值判断是否继续循环 INC/DEC + CMP + JNZ:结合使用,实现循环功能5. 标志位设置指令CMP:比较操作数,设置相应标志位TEST:与目标操作数进行按位与操作,设置相应标志位6. 子程序调用指令CALL:调用子程序RET:子程序返回指令7. 输入输出指令IN:从设备或端口读取数据OUT:向设备或端口输出数据8. 定义数据段指令DB:定义字节数据DW:定义字数据DD:定义双字数据9. 定义代码段指令SECTION:定义代码段10. 定义变量和常量指令DW:定义字变量或常量DD:定义双字变量或常量11. 定义字符串指令DB "Hello, World!",0:定义以0结尾的字符串12. 定义宏指令MACRO:定义宏ENDM:结束宏定义13. 定义过程指令PROC:定义过程ENDP:结束过程定义14. 调试指令INT 3:设置断点NOP:空操作以上是汇编语言中常用的语句一览。

通过熟悉和掌握这些语句,可以更好地编写汇编语言程序,并实现所需的功能。

希望本文对你的学习和使用汇编语言有所帮助。

汇编语言运算符

汇编语言运算符

汇编语言运算符汇编语言是一种低级语言,直接操作计算机硬件的指令和数据。

运算符是汇编语言中常用的操作符号,用于执行各种数学和逻辑运算。

本文将介绍汇编语言中常见的运算符及其使用方式。

一、算术运算符1. 加法运算符(ADD):将两个数相加,并将结果存储在目标操作数中。

例如,ADD AX, BX表示将寄存器AX和BX中的值相加,结果存储在AX中。

2. 减法运算符(SUB):将第二个操作数的值从第一个操作数中减去,并将结果存储在目标操作数中。

例如,SUB AX, BX表示将寄存器BX的值从AX中减去,结果存储在AX中。

3. 乘法运算符(MUL):将两个数相乘,并将结果存储在目标操作数中。

例如,MUL AX, BX表示将寄存器AX和BX中的值相乘,结果存储在AX中。

4. 除法运算符(DIV):将第一个操作数的值除以第二个操作数,并将商存储在目标操作数中。

例如,DIV AX, BX表示将AX的值除以BX,商存储在AX中,余数存储在DX中。

二、逻辑运算符1. 与运算符(AND):对两个操作数进行逻辑与运算,并将结果存储在目标操作数中。

例如,AND AX, BX表示将寄存器AX和BX中的值进行逻辑与运算,结果存储在AX中。

2. 或运算符(OR):对两个操作数进行逻辑或运算,并将结果存储在目标操作数中。

例如,OR AX, BX表示将寄存器AX和BX中的值进行逻辑或运算,结果存储在AX中。

3. 非运算符(NOT):对一个操作数进行逻辑非运算,并将结果存储在目标操作数中。

例如,NOT AX表示对寄存器AX的值进行逻辑非运算,结果存储在AX中。

4. 异或运算符(XOR):对两个操作数进行逻辑异或运算,并将结果存储在目标操作数中。

例如,XOR AX, BX表示将寄存器AX和BX 中的值进行逻辑异或运算,结果存储在AX中。

三、移位运算符1. 左移运算符(SHL):将一个操作数的二进制位向左移动指定的位数,并将结果存储在目标操作数中。

汇编语言x86汇编指令集大全

汇编语言x86汇编指令集大全

汇编语言x86汇编指令集大全汇编语言是计算机体系结构学科中的重要内容之一,它可以直接操作计算机硬件,实现对机器指令的精确控制。

而x86汇编则是汇编语言中最常用的一种,它广泛应用于各类个人电脑和服务器等计算设备中。

x86汇编指令集是汇编语言中的核心,掌握其基本指令对于开发高效的汇编程序至关重要。

本文将介绍x86汇编指令集的各个方面,包括数据传输指令、算术运算指令、逻辑运算指令、分支控制指令以及其他常用指令等内容,以帮助读者全面理解和掌握x86汇编语言。

一、数据传输指令数据传输指令是汇编语言中最基本的指令之一,用于实现数据在寄存器、内存和I/O端口之间的传递。

常见的数据传输指令包括MOV、XCHG、PUSH和POP等。

MOV指令用于将数据从一个位置传送到另一个位置,可以将数据从内存中传送到寄存器,也可以将数据从寄存器传送到内存。

例如,MOV AX, BX表示将寄存器BX中的数据传送到寄存器AX中。

XCHG指令用于交换两个操作数的值,例如,XCHG AX, BX表示交换寄存器AX和BX中的数据。

PUSH指令将数据推入堆栈,POP指令从堆栈中弹出数据。

这两个指令常用于函数调用和局部变量的保存与恢复。

二、算术运算指令算术运算指令用于执行各种数值计算操作,包括加法、减法、乘法、除法以及取模等。

常见的算术运算指令包括ADD、SUB、MUL、DIV和IMUL等。

ADD指令用于进行加法运算,可以将两个操作数相加,并将结果保存在目标操作数中。

例如,ADD AX, BX表示将寄存器BX中的值加到寄存器AX中。

SUB指令用于进行减法运算,可以将目标操作数减去源操作数,并将结果保存在目标操作数中。

MUL指令用于进行无符号数的乘法运算,可以将一个操作数与寄存器中的值相乘,并将结果保存在一对寄存器中。

DIV指令用于进行无符号数的除法运算,可以将寄存器中的值除以一个操作数,并将商保存在一个寄存器中,余数保存在另一个寄存器中。

IMUL指令用于进行有符号数的乘法运算,功能与MUL指令类似,但结果为有符号数。

汇编指令大全

汇编指令大全

汇编指令大全汇编指令是计算机程序设计中的重要组成部分,它是一种低级语言,直接操作计算机硬件,能够对计算机进行精细的控制。

在学习汇编语言时,掌握各种指令是非常重要的,因为它们是编写高效、精确的程序的基础。

本文将对常用的汇编指令进行介绍,帮助读者更好地理解和运用汇编语言。

1. 数据传送指令。

数据传送指令用于在寄存器和内存之间传送数据,常见的指令包括MOV、XCHG等。

MOV指令用于将数据从一个位置复制到另一个位置,XCHG指令用于交换两个位置的数据。

这些指令在编写程序时经常用到,能够实现数据的传递和交换。

2. 算术运算指令。

算术运算指令用于对数据进行加减乘除等数学运算,常见的指令包括ADD、SUB、MUL、DIV等。

ADD指令用于加法运算,SUB指令用于减法运算,MUL指令用于乘法运算,DIV指令用于除法运算。

这些指令能够对数据进行各种数学运算,是编写复杂程序时不可或缺的指令。

3. 逻辑运算指令。

逻辑运算指令用于对数据进行逻辑运算,常见的指令包括AND、OR、NOT、XOR等。

AND指令用于按位与运算,OR指令用于按位或运算,NOT指令用于按位取反,XOR指令用于按位异或运算。

这些指令能够对数据进行逻辑运算,常用于程序中的逻辑判断和条件运算。

4. 跳转指令。

跳转指令用于改变程序的执行顺序,常见的指令包括JMP、JE、JNE、JG等。

JMP指令用于无条件跳转,JE指令用于相等时跳转,JNE指令用于不相等时跳转,JG指令用于大于时跳转。

这些指令能够实现程序的条件分支和循环控制,是编写复杂逻辑的关键指令。

5. 存储器访问指令。

存储器访问指令用于对存储器进行读写操作,常见的指令包括PUSH、POP、LEA等。

PUSH指令用于将数据压入堆栈,POP指令用于将数据弹出堆栈,LEA 指令用于加载有效地址。

这些指令能够对存储器进行高效的读写操作,是程序设计中不可或缺的指令。

6. 输入输出指令。

输入输出指令用于与外部设备进行数据交换,常见的指令包括IN、OUT等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

NEG指令是对指令中的操作数取补,再将结果送回。因 对一个操作数求2的补码,相当于0减去此操作数,所以NEG 指令执行的也是减法操作。
说明:0 – OPRD 又相当于: ①、FFH-OPRD+1 (字节操作)或
②、FFFFH-OPRD+1(字操作)。即将OPRD内容变反加1
例:若(AL)=13H 0000 0000 执行 NEG AL – 0001 0011
0000 0110 + 1111 1100 1← 0000 0010
6 + 252
258>255
+6 + (–4)
+2
CF=1 溢出
OF=0 不溢出
ⅲ、无符号数不溢出,带符号数溢出:
二进制加法 认作无符号 认作带符号数
0000 1000 + 0111 1011
1000 0011
8 + 123
131 CF=0 无溢出
2、带进位位的加法指令ADC ADC dest , src ; dest←dest+src+CF
ADC主要用于多字节运算,ADC对标志位的影响同ADD。 例:计算 1234FEDCH+33128765H 分别存于数据段指
定的区域中,低位在前,高位在后,相加后其和存入前一个双 字所在的区域中。 (SI)→1000H DCH (41H)
+ 39H 0011 1001
0110 1110
则(AL)=6EH,低4位为非法码,故需调整。
4、组合十进制加法调整指令DAA
(BCD码的加法十进制调整指令)
格式:DAA
功能:对组合BCD码相加的结果进行调整,使结果仍为 组合的BCD码。
DAA指令调整方法如下: ①、若AL寄存器的低4位是十六进制数的A∽F,或AF标志 为1,则AL寄存器内容加06修正,且将AF设置为1。
; +6调整
(AF)← 1
;只影响AF、CF标志
(CF)← (AF)
不影响其它标志
(AH)← (AH)+1
; 高位加1,即AH寄存器内容加1
(AL)← (AL)&0FH ; 清除AL高4位
例:设(AL)=08,(BL)=07
执行 ADD AL,BL AAA
执行结果:AX=0105H
㈡、减法指令
1、不带借位的减法指令SUB 格式与功能:SUB dest , src ;B/W dest←dest-src 例:SUB AL , 66H ; AL的内容减去立即数再放回AL中
FEH (86H) 34H (57H) 12H (23H)

(DI)→2000H 65H 87H 12H
33H
双字相加的程序段如下:
MOV SI,1000H ;设源指针指向1000H MOV AX,[SI] ;将第一个双字的低位字取入AX MOV DI,2000H ;设目的指针指向2000H ADD AX,[DI] ;低位字相加 MOV [SI],AX ;存低位字相加之和 MOV AX,[SI+2] ;将第一个双字的高位字取入AX ADC AX,[DI+2] ;两高位字连同进位一起相加 MOV [SI+2],AX ;存高位字相加之和 3、增量指令INC INC OPRD ;B/W OPRD←OPRD+1 例:INC BL ;将BL的内容加1后再送回BL中
JNS NEXT
;若SF=0,则(AX)>(BX),转NEXT
XCHG AX,BX ;否则交换
NEXT:HLT
Ⅱ、两负数比较,即A<0,B<0:两负数相减,结果也不会溢出,
仍可用符号标志,若SF=0,则A>B;反之若SF=1,则A<B。
Ⅲ、两异号数比较。当A>0,B<0时,当然的结果应该是A>B,
而且有SF=0。
N
传完否?
JNZ AGAIN ;CX≠0,循环
Y
结束ห้องสมุดไป่ตู้

8086算术运算指令可用的BCD码有两种:
ⅰ、组合BCD码:一个字节表示2位BCD码
ⅱ、非组合BCD码:一个字节只用低4位表示1位BCD 码, 高4位为0(无意义)。
例:设(AL)=35,(BL)=39 35H 0011 0101
执行 ADD AL,BL
LEA SI,BUF1 ;SI指向BUF1 LEA DI,BUF2 ;DI指向BUF2
取数 传送
MOV CX,100 ;CX放计数初值
AGAIN:MOV AL,[SI] ;取一字节数 MOV [DI],AL ;传送一字节数
修改地址指针 修改计数器
INC SI INC DI DEC CX
;修改地址指针 ;修改计数初值
+8 + (+123)
+131>127 OF=1 溢出
ⅳ、无符号数溢出,带符号数溢出:
二进制加法 认作无符号 认作带符号数
1000 0111 + 1111 0101 1← 0111 1100
135 + 245
380>255
-121 + -11
-132<-128
CF=1 溢出
OF=1 溢出
①、当无符号数运算产生溢出时,CF=1; ②、当带符号数运算产生溢出时,OF=1;
二、算术运算指令 ㈠、加法类指令
操作数以数据形式分:8位或16位 以操作数的类型:无符号数和带符号数
1、加法指令(不带进位位的加法指令ADD)
格式:ADD dest,src ;dest←dest+src
功能:将源操作数与目的操作数相加,将结果送回目的操 作数。指令执行后对各状态标志均产生影响。
例:ADD CX,0F0F0H 设指令执行前(CX)=5463H
⑷、INC指令与带立即数1的ADD指令相比较,除INC指 令不影响CF标志外,其余完全相同,且INC指令所在地需字 节较少。
例:将数据段中从BUF1开始存放的100个字节数搬到附 加段以BUF2为首址的区域中。
设用SI和DI寄存器分别作BUF1和BUF2区的指针,指向 首地址。
地址设置地址指针 设置计数初值
例:ⅰ.若A=+50,B=-63,结果A-B=113<+127,不溢出,OF=0。
ⅱ.若A=+127,B=-63,结果是: [+127]补=0111 1111B
A-B=+127-(-63)=190>+127, 溢出,这时,机器中的结果是为:
+ [+63]补=0011 1111B 1011 1110B
MOV BCD3+1 , AL ;存高位字节和
5、非组合十进制数加法调整指令AAA
(加法的ASCII调整指令)
格式:AAA
AAA指令用于对非组合BCD码相加结果进行调整。调
整操作在AL中进行,调整后的结果在AX中。
AAA指令的操作如下:
若(AL)&0FH>9,或AF=1 则有以下操作:
(AL)← (AL)+6
③、当操作数的值为–128(即80H)或为–32768(即8000H) 的情况下,执行NEG指令后,结果无变化。
④、用途:把正数变成负数或相反。
5、比较指令CMP
CMP dest,src ;B/W dest-src 即完成两操作数相减,
并不回送任何操作数,但结果影响标志 用途:比较指令执行结果影响标志。通常,比较指令后跟 一条条件转移指令,检查标志位的状态以决定程序的转向。 由状态如何判断两操作数比较的结果呢?
0101 0100 0110 0011
思考:
+ 1111 0000 1111 0000
PF= ?AF=?
1← 0100 0101 0101 0011 AX
CF
状态标志:CF=1、ZF =0、SF=0、OF=0
ADD AX,BX ;寄存器,寄存器寻址,结果放在AX寄存器中 ADD AX , [BX+SI] ;寄存器,基址变址寻址,结果在AX中 ADD [BX+6000H] , AX ; 基址相对、寄存器寻址,结果在
SUB AX , BX ; AX内容减BX中内,结果放在AX中 SUB [BX+15H] , 6800H ; [BX+15H]所指的字单元中的16
数减去立即数,结果放在字单元中 SUB [BP+12H], CX ;将SS段中[BP+12H]所指的字单元的
内容减CX的内容,结果放在堆栈的该 单元中 说明:①、SUB 指令执行结果影响标志位。
②、若AL寄存器高4位是十六进制数的A∽F,或CF标志为 1,则AL寄存器内容加60H修正,并将CF设置为1。
说明:
⑴、DAA指令必须紧跟在ADD或ADC(对两个组合的 BCD码相加)的后面。
⑵、DAA指令影响标志AF、CF、PF、SF、ZF。而对
OF标志是任意的。 例:计算2964+4758
采用直接寻址,程序如下:
[-63]补=1100 0001B + [-127]补=1000 0001B
②、源和目的操作数不能同时为存储器操作数。其 它注意事项同ADD指令。
2、带借位的减法指令SBB
SBB dest,src ; B/W dest←dest-src-CF
SBB指令同ADC指令一样,用在两个多倍数精度数的非最 低字或非最低字节的相减。
影响标志
3、减1指令DEC
DEC OPRD ; B/W OPRD←OPRD-1
设比较的两操作数为A和B:
⑴、当两数相等(不管是无符号数或带符号数),则ZF=1, 否则ZF=0;
⑵、若两数不相等,则应区分是无符号数还是带符号数:
相关文档
最新文档