30个常用汇编命令

合集下载

汇编DEBUG命令详解

汇编DEBUG命令详解

DEBUG命令详解DEBUG是DOS中的一个外部命令,从DOS 1.0起就带有此命令,因此可见此命令的重要性了。

虽然此命令的功能非常强大,可以解决许多问题,可是对许多人来说,尤其是初学者来说,却非常不易掌握。

因此,现将DEBUG的命令详细介绍一番,以让大家知道它的使用。

Debug:A(汇编)直接将 8086/8087/8088 记忆码合并到内存。

该命令从汇编语言语句创建可执行的机器码。

所有数值都是十六进制格式,必须按一到四个字符输入这些数值。

在引用的操作代码(操作码)前指定前缀记忆码。

a [address]参数address指定键入汇编语言指令的位置。

对 address 使用十六进制值,并键入不以“h”字符结尾的每个值。

如果不指定地址,a 将在它上次停止处开始汇编。

有关将数据输入到指定字节中的信息,请单击“相关主题”列表中的 Debug E(键入)。

有关反汇编字节的信息,请单击“相关主题”列表中的 Debug U(反汇编)。

说明使用记忆码段的替代记忆码为 cs:、ds:、es: 和 ss:。

远程返回的记忆码是 retf。

字符串处理的记忆码必须明确声明字符串大小。

例如,使用 movsw 可以移动 16 位的字串,使用 movsb 可以移动 8 位字节串。

汇编跳转和调用汇编程序根据字节替换自动将短、近和远的跳转及调用汇编到目标地址。

通过使用 near 或far 前缀可以替代这样的跳转或调用,如下例所示:-a0100:05000100:0500 jmp 502 ; a 2-byte short jump0100:0502 jmp near 505 ; a 3-byte near jump0100:0505 jmp far 50a ; a 5-byte far jump可以将 near 前缀缩写为 ne。

区分字和字节内存位置当某个操作数可以引用某个字内存位置或者字节内存位置时,必须用前缀 word ptr 或者前缀 byte ptr 指定数据类型。

汇编语言上机实验一DEBUG常用命令及8086指令使用

汇编语言上机实验一DEBUG常用命令及8086指令使用

汇编语⾔上机实验⼀DEBUG常⽤命令及8086指令使⽤实验⼀DEBUG常⽤命令及8086指令使⽤实验⽬的:通过实验掌握下列知识:1、8086指令: M OV,ADD,SUB,XCHG等2、DEBUG命令: A,D,E,F,H,R,T,U。

3、ASCII码及⽤16进制数表⽰⼆进制码的⽅法。

内容及步骤:⼀、DEBUG 命令使⽤:1、打 DEBUG 进⼊ DEBUG 控制,显⽰提⽰符 '_ '。

2、⽤命令 F100 10F 'A' 将'A'的ASCII码填⼊内存。

3、⽤命令 D100 10F 观察内存中的16进制码及屏幕右边的ASCII字符。

4、⽤命令F110 11F 41 重复上⼆项实验,观察结果并⽐较。

5、⽤命令 E100 30 31 32 …… 3F将30H-3FH写⼊地址为100开始的内存单元中,再⽤D命令观察结果,看键⼊的16进制数是什么字符的ASCII码?6、⽤H命令检查下列各组16进制数加减结果并和你的⼿算结果⽐较:(1)34H,22H (2)56H,78H (3)A5,79H (4)1284H,5678H (5)A758,347FH7、⽤R 命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF和AF的内容。

8、⽤R命令将AX,BX内容改写为1050H及23A8H。

⼆、8086常⽤指令练习1、传送指令1)⽤A命令在内存100H处键⼊下列内容: MOV AX,1234MOV BX,5678XCHG A X,BXMOV AH,35MOV AL,48MOV DX,75ABXCHG A X,DX2)⽤U命令检查键⼊的程序并记录,特别注意左边的机器码。

3)⽤T命令逐条运⾏这些指令,每运⾏⼀⾏检查并记录有关寄存器及IP的变化情况。

并注意标志位有⽆变化。

2、加减法指令:1)⽤A命令在内存100H处键⼊下列内容:MOV AH,34MOV AL,22ADD AL,AHSUB AL,78MOV CX,1284MOV DX,5678ADD CX,DXSUB CX,AXSUB CX,CX图略。

汇编 第四章伪指令及汇编语言源程序结构

汇编 第四章伪指令及汇编语言源程序结构

MOV AL, BUF1
ADD AL, BUF2 MOV SUM, AL
;取第一个加数
;两数加 ;和放入SUM单元
3
伪指令(指 示性)语句: 提供相关辅 助信息。
指令性语句: 完成一定功 能,能翻译 成机器码。
伪指令语句
DATA SEGMENT ;DATA段定义开始 BUF1 DB 34H BUF2 DB 27H SUM DB ? DATA ENDS ;DATA段定义结束 CODE SEGMENT ;CODE段定义开始 ASSUME CS:CODE ASSUME DS:DATA ;段性质规定 START: MOV AX,DATA MOV DS,AX ;给DS赋值 MOV AL, BUF1 ;取第一个加数 ADD AL, BUF2 ;两数加 MOV SUM, AL ;和放入SUM单元 MOV AH,4CH INT 21H ;返回DOS CODE ENDS ;CODE段定义结束 END START ;源程序结束
14
二、= 等号伪指令
格式:符号名 = 表达式 功能:为常量、表达式及其他各种符号定义一个等价的符号 名,并能对所定义的符号多次重复定义,且以最后一次定义 的值为准。 例:COST = 20 M = MOV LOST = COST+10 ;30→LOST M = ADD ;M=ADD 注 : “ = ” 伪 指 令 的 格 式 和 功 能 与 EQU 类 似 。 二者区别:在同一程序中,“=”可以对一个符号重 复定义,EQU不能对同一符号重复定义。
26
三、变量、标号的分析运算和合成运算
例:DATA SEGMENT A DB ‘ABCDEF’ B DW 10 DUP(1,2DUP(2)) C DB 3,20 DUP(0) DATA ENDS ┆ MOV AX,LENGTH A ;1→AX MOV BX,LENGTH B ;10→BX MOV CX,LENGTH C ;1→CX ┆

dos汇编debug基本命令程序

dos汇编debug基本命令程序

dos汇编debug基本命令程序DOS汇编(Debug)基本命令程序在学习和编写DOS汇编语言程序时,了解和掌握调试程序是非常重要的。

DOS提供了一个非常有用的调试器,即Debug。

Debug是一个基本的汇编语言调试程序,它可以让程序员在运行程序时进行单步执行,查看寄存器和内存的内容,以及进行程序的调试和错误修复。

本文将介绍DOS汇编(Debug)基本命令程序。

一、启动Debug要启动Debug,可以在DOS命令提示符下输入"debug"命令,然后按Enter键。

此时,会显示Debug的提示符"-",表示Debug 已经启动。

二、基本命令Debug提供了一系列命令,用于执行和调试汇编语言程序。

下面是一些常用的基本命令:1. a(assemble):将汇编指令翻译成机器码,并将其写入内存中。

例如,输入"a 100"表示从内存地址100开始输入汇编指令。

2. d(dump):显示内存中的内容。

可以使用"d"命令来查看内存中的指令和数据。

例如,输入"d 100"表示从内存地址100开始显示内存内容。

3. e(enter):修改内存中的指令或数据。

可以使用"e"命令来修改内存中的指令或数据。

例如,输入"e 100"表示修改内存地址100处的内容。

4. g(go):执行程序。

使用"g"命令可以让程序开始执行。

例如,输入"g"表示开始执行程序。

5. r(register):显示和修改寄存器的内容。

可以使用"r"命令来查看和修改寄存器的内容。

例如,输入"r ax"表示显示或修改AX寄存器的内容。

6. t(trace):单步执行程序。

使用"t"命令可以让程序以单步执行的方式运行。

汇编常用指令

汇编常用指令

汇编常用指令1. 前言汇编语言是一种低级别的计算机语言,它是由一些指令组成的。

指令是一条计算机执行的命令,从基本上讲,这些指令代表着标准的操作,例如加、减、乘、除、移位和比较等。

汇编语言可以通过编写程序来控制一个计算机的行为,这些程序通常被称为汇编程序。

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

2. 数据传送指令数据传送指令是汇编语言中最基本的指令之一,它主要用来将数据从一个位置传送到另一个位置。

在汇编语言中,数据传送指令通常使用MOV语句来实现。

下面是一些常用的数据传送指令:- MOV AX, BX:将BX中存储的数据传送到AX中。

- MOV AX, [BX]:将BX中存储的地址所指向的数据传送到AX中。

- MOV [BX], AX:将AX中存储的数据传送到BX所指向的地址中。

3. 算术运算指令算术运算指令主要用来执行各种数学运算,例如加法、减法、乘法和除法等操作。

下面是一些常用的算术运算指令:- ADD AX, BX:将BX中存储的数据与AX中存储的数据相加,并将结果存储在AX中。

- SUB AX, BX:将BX中存储的数据从AX中存储的数据中减去,并将结果存储在AX中。

- MUL BX:将AX中存储的数据与BX中存储的数据相乘,并将结果存储在AX中。

- DIV BX:将AX中存储的数据除以BX中存储的数据,并将结果存储在AX和DX中。

4. 位运算指令位运算是一种在二进制数字级别上的运算,它可以执行各种位操作,例如AND、OR、XOR和NOT等操作。

下面是一些常用的位运算指令:- AND AX, BX:将BX中存储的数据与AX中存储的数据按位进行AND运算,并将结果存储在AX中。

- OR AX, BX:将BX中存储的数据与AX中存储的数据按位进行OR 运算,并将结果存储在AX中。

- XOR AX, BX:将BX中存储的数据与AX中存储的数据按位进行XOR运算,并将结果存储在AX中。

- NOT AX:将AX中存储的数据按位进行取反操作。

MCS-51单片机汇编指令详解

MCS-51单片机汇编指令详解

MCS-51单片机汇编指令详解以累加器为目的操作数的指令MOV A,RnMOV A,directMOV A,@RiMOV A,#data第一条指令中,Rn代表的是R0-R7。

第二条指令中,direct就是指的直接地址,而第三条指令中,就是我们刚才讲过的。

第四条指令是将立即数data送到A中。

下面我们通过一些例子加以说明:MOV A,R1 ;将工作寄存器R1中的值送入A,R1中的值保持不变。

MOV A,30H ;将内存30H单元中的值送入A,30H单元中的值保持不变。

MOV A,@R1 ;先看R1中是什么值,把这个值作为地址,并将这个地址单元中的值送入A中。

如执行命令前R1中的值为20H,则是将20H单元中的值送入A中。

MOV A,#34H ;将立即数34H送入A中,执行完本条指令后,A中的值是3 4H。

以寄存器Rn为目的操作的指令MOV Rn,AMOV Rn,directMOV Rn,#data这组指令功能是把源地址单元中的内容送入工作寄存器,源操作数不变。

以直接地址为目的操作数的指令MOV direct,A 例: MOV 20H,AMOV direct,Rn MOV 20H,R1MOV direct1,direct2 MOV 20H,30HMOV direct,@Ri MOV 20H,@R1MOV direct,#data MOV 20H,#34H以间接地址为目的操作数的指令MOV @Ri,A 例:MOV @R0,AMOV @Ri,direct MOV @R1,20HMOV @Ri,#data MOV @R0,#34H十六位数的传递指令MOV DPTR,#data168051是一种8位机,这是唯一的一条16位立即数传递指令,其功能是将一个16位的立即数送入DPTR中去。

其中高8位送入 DPH(083H),低8位送入DPL(082H)。

例:MOV DPTR,#1234H,则执行完了之后DPH中的值为12H,DPL中的值为34H。

mov汇编指令

mov汇编指令

mov汇编指令Mov汇编指令是汇编语言中常见的一种指令,又称为“移动”命令,是在计算机编程中常用的一种指令。

它可以实现数据在计算机内部的移动运算,是为实现计算机的运算功能而设计的基础指令。

Mov 指令的基本语法是“mov的操作数>,操作数>”。

Mov指令是汇编语言中最基本的指令之一,它的主要作用就是实现简单的数据移动任务。

它能够将源操作数的内容拷贝到目的操作数中,也可以将目的操作数的值复制到源操作数中。

它可以实现寻址、移动、复制、类型转换等多种功能。

Mov指令可以实现指令与指令之间、指令与数据之间以及指令与地址之间的移动,可以说是计算机编程的最基础的指令,也是许多计算机程序设计的核心。

Mov指令的实现机制是将源操作数的内容复制到目的操作数中,主要是通过CPU寄存器中的ALU(算术逻辑单元)单元来实现。

通常情况下,ALU会根据源操作数和目的操作数的类型,来处理这两个操作数中的数据,然后将处理结果赋值给目的操作数,从而实现移动指令的功能。

Mov指令有很多种形式,例如Mov指令所支持的数据大小就有很多,可以根据不同的使用环境实现对应的Mov指令,可以是从字到字、从位到位或者从字到字间的移动等等。

此外,Mov指令还提供了一些特殊的操作,比如立即数移动、直接内存移动、间接内存移动等,这些特殊的操作可以满足不同的使用需要。

Mov指令的执行速度是汇编语言中的基本指令中最快的,主要是由于它可以实现数据移动以及简单的计算功能。

它的执行速度可以满足大多数计算机程序设计需求,并且可以显著提高计算机程序的执行速度。

Mov指令是汇编语言中最基本的指令之一,它的作用是实现数据移动,而且它的执行速度也比较快。

它可以实现指令与指令之间、指令与数据之间以及指令与地址之间的移动,是实现计算机程序设计的基本指令。

因此,Mov指令是计算机编程中不可缺少的一种重要指令。

DSP常用汇编语言指令简介

DSP常用汇编语言指令简介
南航自动化学院DSP技术应用实验 unconditionally 室
5. 控制指令举例
Example1:BIT0h,15 ;(DP = 6)把内存地址=300h 单元内容的最低位(BIT0)送给TC。 Example2:LDP #0h;使用立即数方式装载 数据页,也可以采用直接寻址和间接寻址方式装 载。 Example3:PUSH ;把累加器的低16位压入堆 栈。 Example4:SETC C;置进位C=1,也可以设置 以下的控制位为1或者为0,例如:CNF、INTM、 OVM、SXM、TC和XF。类似的指令还有: CLRC。
2. 工作寄存器等指令举例
Example4:ADRK #80h ;把当前工作寄存器内容 加一个立即数80h(注意立即数范围:00~FFh)。类 似的指令还有SBRK。 Example5:BANZ指令使用举例。例: MAR *, AR0 ;当前ARP=AR0 LAR AR1, #03h ;AR1内容赋值为03h LAR AR0, #60h ;AR0内容赋值为60h ZAC ; 累加器ACC清零 loop: ADD *+, AR1 ;把当前工作寄存器AR0指向 的内存单元数值加到ACC,然后AR0内容加1,当前工 作寄存器指针指向AR1 BANZ loop, *-AR0 ;判断AR0是否为0,否则程序 转到loop,同时AR0的内容减1。 南航自动化学院DSP技术应用实验 返回到第10页 室
南航自动化学院DSP技术应用实验 室
1. 累加器等指令举例
Example 1:ADD 1,1;(假设DP = 6),把 第6个数据页的第一个内存单元内容左移一 位加到累加器 Example 2:LACC *,4; (与SXM有关) Example 3:ROL;把累加器内容循环左移 Example 4:SACL *,0,AR7 ;把当前工作寄 存器指示内容左移0位送入累加器的低8位 Example 5:RPT #15 SUBC * ;累加器减去当前寄存 器指的内容,连续减16次,结果存累加器

汇编指令大全

汇编指令大全

汇编指令大全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指令用于将目的操作数除以源操作数,并将商存储在目的操作数中,余数存储在另一个寄存器中。

常见汇编命令英文缩写

常见汇编命令英文缩写

常见汇编命令英文缩写学习汇编中碰到的很多命令书上都没介绍怎么来的,是哪个英文单词的缩写,这样记起来很是麻烦,现总结一下,以方便记忆。

寄存器类(register):通用寄存器:AX,BX,CX,DX——这几个没什么好写的,就是这样了。

段寄存器:代码段寄存器CS--code segment , 数据段寄存器DS--data segment , 堆栈段寄存器SS--stack segment ,附加段寄存器ES--extra segment 。

特殊功能寄存器:指令指针寄存器IP--instruction pointer ,堆栈指针SP--stack pointer ,基址指针BP--base pointer ,源变址寄存器SI--source index ,目标变址寄存器DI--destination index ,标志寄存器FR--flag register(或者叫程序状态字PSW--program status word)。

PSW常用的标志有:标志值为1时的标记值为0时的标记OF(overflow flag) OV(overflow) NV(not overflow)ZF(zero flag) ZR(zero) NZ(not zero)PF(parity flag) PE(parity even) PO(parity odd)CF(carry flag) CY(carried) NC(not carried)DF(direction flag) DN(down) UP(up)SF(sign flag) NG(negtive) PL(plus)TF(trap flag)IF(interrupt flag)AF(auxiliary flag)命令类1.通用数据传送指令.MOV----> moveMOVSX---->extended move with sign dataMOVZX---->extended move with zero dataPUSH---->pushPOP---->popPUSHA---->push allPOPA---->pop allPUSHAD---->push all dataPOPAD---->pop all dataBSWAP---->byte swapXCHG---->exchangeCMPXCHG---->compare and change XADD---->exchange and addXLAT---->translate2.输入输出端口传送指令.IN---->inputOUT---->output3.目的地址传送指令.LEA---->load effective addressLDS---->load DSLES---->load ESLFS---->load FSLGS---->load GSLSS---->load SS4.标志传送指令.LAHF---->load AH from flagSAHF---->save AH to flagPUSHF---->push flagPOPF---->pop flagPUSHD---->push dflagPOPD---->pop dflag二、算术运算指令ADD---->addADC---->add with carryINC---->increase 1AAA---->ascii add with adjustDAA---->decimal add with adjust SUB---->substractSBB---->substract with borrowDEC---->decrease 1NEC---->negativeCMP---->compareAAS---->ascii adjust on substract DAS---->decimal adjust on substract MUL---->multiplicationIMUL---->integer multiplicationAAM---->ascii adjust on multiplicationDIV---->divideIDIV---->integer divideAAD---->ascii adjust on divideCBW---->change byte to wordCWD---->change word to double wordCWDE---->change word to double word with sign to EAXCDQ---->change double word to quadrate word三、逻辑运算指令———————————————————————————————————————AND---->andOR---->orXOR---->xorNOT---->notTEST---->testSHL---->shift leftSAL---->arithmatic shift leftSHR---->shift rightSAR---->arithmatic shift rightROL---->rotate leftROR---->rotate rightRCL---->rotate left with carryRCR---->rotate right with carry四、串指令———————————————————————————————————————MOVS---->move stringCMPS---->compare stringSCAS---->scan stringLODS---->load stringSTOS---->store stringREP---->repeatREPE---->repeat when equalREPZ---->repeat when zero flagREPNE---->repeat when not equalREPNZ---->repeat when zero flagREPC---->repeat when carry flagREPNC---->repeat when not carry flag五、程序转移指令———————————————————————————————————————1>无条件转移指令(长转移)JMP---->jumpCALL---->callRET---->returnRETF---->return far2>条件转移指令(短转移,-128到+127的距离内) JAE---->jump when above or equalJNB---->jump when not belowJB---->jump when belowJNAE---->jump when not above or equalJBE---->jump when below or equalJNA---->jump when not aboveJG---->jump when greaterJNLE---->jump when not less or equalJGE---->jump when greater or equalJNL---->jump when not lessJL---->jump when lessJNGE---->jump when not greater or equalJLE---->jump when less or equalJNG---->jump when not greaterJE---->jump when equalJZ---->jump when has zero flagJNE---->jump when not equalJNZ---->jump when not has zero flagJC---->jump when has carry flagJNC---->jump when not has carry flagJNO---->jump when not has overflow flagJNP---->jump when not has parity flagJPO---->jump when parity flag is oddJNS---->jump when not has sign flagJO---->jump when has overflow flagJP---->jump when has parity flagJPE---->jump when parity flag is evenJS---->jump when has sign flag3>循环控制指令(短转移)LOOP---->loopLOOPE---->loop equalLOOPZ---->loop zeroLOOPNE---->loop not equalLOOPNZ---->loop not zeroJCXZ---->jump when CX is zeroJECXZ---->jump when ECX is zero4>中断指令INT---->interruptINTO---->overflow interruptIRET---->interrupt return5>处理器控制指令HLT---->haltWAIT---->waitESC---->escapeLOCK---->lockNOP---->no operationSTC---->set carryCLC---->clear carryCMC---->carry make changeSTD---->set directionCLD---->clear directionSTI---->set interruptCLI---->clear interrupt六、伪指令—————————————————————————————————————DW---->definw wordPROC---->procedureENDP---->end of procedureSEGMENT---->segmentASSUME---->assumeENDS---->end segmentEND---->end。

汇编跳转指令表

汇编跳转指令表

汇编跳转指令表汇编语言中的跳转指令主要用于控制程序的流程。

以下是一些常见的汇编语言跳转指令及其说明:1. JMP (Jump) - 无条件跳转。

无论目标地址是什么,都会跳转到该地址。

2. JE (Jump if Equal) - 如果两个操作数相等,则跳转。

常与比较指令(CMP)一起使用。

3. JNE (Jump if Not Equal) - 如果两个操作数不相等,则跳转。

常与比较指令(CMP)一起使用。

4. JG (Jump if Greater) - 如果第一个操作数大于第二个操作数,则跳转。

常与比较指令(CMP)一起使用。

5. JGE (Jump if Greater or Equal) - 如果第一个操作数大于或等于第二个操作数,则跳转。

常与比较指令(CMP)一起使用。

6. JL (Jump if Less) - 如果第一个操作数小于第二个操作数,则跳转。

常与比较指令(CMP)一起使用。

7. JLE (Jump if Less or Equal) - 如果第一个操作数小于或等于第二个操作数,则跳转。

常与比较指令(CMP)一起使用。

8. JA (Jump if Above) - 如果无符号运算的结果大于0,则跳转。

常与ADC指令一起使用。

9. JBE (Jump if Below or Equal) - 如果无符号运算的结果小于或等于0,则跳转。

常与SUBB指令一起使用。

10. JS (Jump if Signed) - 如果结果为负,则跳转。

常与ADC指令一起使用。

11. JO (Jump if Overflow) - 如果溢出发生,则跳转。

常与ADC、ADD或SUB指令一起使用。

12. JNP (Jump if Not Parity) - 如果结果没有奇偶校验位,则跳转。

常与ADC指令一起使用。

13. JPO (Jump if Parity) - 如果结果有奇偶校验位,则跳转。

常与ADC指令一起使用。

ARM汇编常用命令备注 LDR adr LDR=的用法含义

ARM汇编常用命令备注 LDR adr LDR=的用法含义

ARM汇编常用命令备注:1、标签标签就是在某行程序代码前作一个标记,标签代表的是这行代码的地址。

_undefined_instruction: .word undefined_instruction_undefined_instruction是一个标号,处理到这里时,asm会把undefined_instruction的值按16bit 的形式放在此标号处。

ldr pc, _undefined_instruction就是从_undefined_instruction处取值,即undefined_instruction,并设置到pc中。

.word就是在这个地方放一个值。

相当于在这里定义一个数据变量。

用.word定义了一个16bit 的数据。

并将underfined_instruction的值本身放在这里,因此,pc=undefined_instruction,实现跳转。

ldr 是把数据从存储器传输到寄存器上,格式如下:ldr(条件) 目的寄存器,<存储器地址>Ex1:.globl _start.globl _armboot_start_start:b reset_armboot_start:.word _startldr r2, _armboot_start.word expression就是在当前位置放一个word型的值,这个值就是expression ,此处的含义就是建立一个全局标签_armboot_start,在这个位置上放置_start的值(可以这样理解,_armboot_start是一个地址,这个地址中的内容是_start),则下面的语句会把地址_armboot_start处的内容(_start)装载到r2中。

Ex2:ldr r1, _rWTCON_rWTCON:.word 0x15300000是把地址_rWTCON上的内容放到r1(不是把地址0x1530 0000 上的内容传递到r1),而地址_rWTCON上的内容是0x15300000。

CE自动汇编脚本:常用命令

CE自动汇编脚本:常用命令
mov eax,#99 //强制用十进制
push 63
pop eax //比上面的代码要短1点
如果想写符点数,用浮点数计算工具把浮点数转换为16进制数值。附件提供下载。
========跳转的用法
jmp 00520000 (绝对地址)
label(aaa)
jmp aaa (标签跳转)
alloc(newmem,0x1000)
jmp newmem+50 (内存间跳转)
alloc(newmem,0x1000)
jmp short 20 (ce5.5特有,这将会跳到newmem+20的地址上去),等同于jmp nenmem+20。
尽量不要用这个命令。
test eax,eax
CE自动汇编脚本:常用命令
======常用命令
alloc(arg1,arg2) 分配内存
如:alloc(newmem,0x1000) alloc(newmem,1000)
dealloc(arg1)
必须是 alloc命令分配的内存
globalalloc(arg1,arg2) 分配全局内存
和alloc用法相同,分配后始终存在,无需dealloc
registersymbol(arg1) 注册全局名称
必须是alloc命令分配的内存
unregistersymbol(arg1)
========地址的表示方法
db 75 01 (向后跳1个字节,跳过ret)
ret
除非你知道要跳过的代码长度,否则绝对不要随意用。
74 je
75 jne
createthread(arg1) 远程创建线程

汇编_DEBUG的使用

汇编_DEBUG的使用

汇编_DEBUG的使用汇编语言是一种低级语言,它与机器语言非常接近,每一个汇编语言的指令几乎都对应着一条机器指令。

因此,了解并掌握汇编语言对于理解计算机内部工作原理以及进行底层编程是非常有帮助的。

下面,我将详细介绍DEBUG的使用方法和功能。

1.DEBUG的启动和退出:在DOS命令行下输入DEBUG命令,即可启动DEBUG。

DEBUG启动后,会显示一个短横线"-”,表示等待执行命令。

在DEBUG中输入"q"命令,即可退出DEBUG。

2.DEBUG的命令格式和常用命令:-a:将键盘输入的ASCII码写入指定地址-d:显示内存中的指定地址的内容-e:修改内存中的指定地址的内容-g:从指定地址开始执行程序-r:查看和修改寄存器的值-t:查看和修改标志寄存器的值-u:以汇编代码的格式显示内存中的指令-w:将内存中的内容写入指定文件-n:加载并执行指定文件-i:打印当前的执行指令-f:在段间切换3.DEBUG的常用调试操作:- 通过“d”命令查看内存中的指令和数据内容,可以使用不同的参数来控制显示格式,如"d 100"表示从100H地址处开始显示,"d cs:100"表示从CS:100H地址处开始显示。

-通过“e”命令修改内存中的指令和数据内容。

- 通过“r”命令查看和修改寄存器的值,如"r ax"表示查看和修改AX寄存器的值。

-通过“u”命令以汇编代码的格式显示内存中的指令。

-通过“g”命令从指定地址开始执行程序。

-通过“n”命令加载并执行指定的二进制文件。

4.示例:下面给出一个使用DEBUG调试的示例过程:-启动DEBUG,进入DEBUG命令行界面。

-使用“n”命令加载一个二进制文件。

-使用“d”命令查看内存中的指令和数据,以及寄存器的值。

-使用“e”命令修改内存中的指令和数据。

-使用“g”命令执行程序。

-使用“r”命令查看和修改寄存器的值。

x86汇编 讲解

x86汇编 讲解

x86汇编讲解摘要:1.x86 汇编简介2.x86 汇编的基本语法3.x86 汇编的寄存器和内存4.x86 汇编的指令集5.x86 汇编的应用场景正文:【x86 汇编简介】x86 汇编是一种用于编写计算机程序的低级编程语言。

它是x86 架构处理器的指令集体系结构(ISA) 的助记符表示形式。

x86 汇编语言可以用于编写操作系统、驱动程序和嵌入式系统等底层应用程序。

由于其底层特性,x86 汇编语言能够直接访问计算机硬件,并实现高性能的计算。

【x86 汇编的基本语法】x86 汇编语言的基本语法包括以下几个部分:1.指令:x86 汇编指令是用于完成特定任务的命令。

每个指令都有一个操作码,它表示指令要执行的操作。

操作码后面通常跟有一些操作数,用于指定操作的对象。

2.寄存器:x86 汇编中的寄存器是一组高速存储单元,用于存储数据和地址。

常用的寄存器包括通用寄存器(EAX、EBX、ECX、EDX)、指针寄存器(ESP、EBP)和索引寄存器(ESI、EDI)等。

3.内存:x86 汇编中的内存是指计算机中的主存储器,用于存储程序和数据。

内存地址通常用基址(Base Address)加偏移量(Displacement)的方式表示。

4.常用指令:x86 汇编中有很多常用指令,包括数据传输指令(如MOV)、算术指令(如ADD、SUB)、逻辑指令(如AND、OR)、跳转指令(如JMP、JZ、JNZ)等。

【x86 汇编的寄存器和内存】x86 汇编中的寄存器和内存扮演着非常重要的角色。

它们可以存储程序中的数据和地址,并在程序运行过程中进行高速读写。

以下是一些常用的寄存器和内存操作指令:1.寄存器指令:MOV 寄存器,数值将数值移动到指定的寄存器中。

2.内存指令:MOV 内存地址,寄存器将寄存器的值移动到指定的内存地址。

3.加载/存储指令:LOAD/STORE 寄存器,内存地址在内存和寄存器之间传输数据。

【x86 汇编的指令集】x86 汇编指令集非常丰富,可以完成各种复杂的操作。

STM32常用汇编指令

STM32常用汇编指令

连续存储单元的值传送到 R1~R4。
(9)SBC 指令的格式为:
SBC{条件}{S} 目的寄存器,操作数 1,操作数 2
SBC 指令用于把操作数 1 减去操作数 2,再减去 CPSR 中的 C 条件标志位的反码,并将结果
存放到目的寄存器中。操作数 1 应是一个寄存器,操作数 2 可以是一个寄存器,被移位的寄
含义:(1)SP-->R8 SP=SP+4
(2)SP=SP+4 (3)SP-->R9 (4)SP=SP+4 (5)SP-->PC (6)
ldmia sp!
{ r0-r7 pc }^
^ 表示将 spsr 的值赋给 cpsr
B lable
跳转指令 PC<---lable
BL lable 带链接跳转指令
LR<----PC-4, PC<---lable
(11)MCR 指令的格式为:
MCR{条件} 协处理器编码,协处理器操作码 1,源寄存器,目的寄存器 1,目的寄存器 2,
协处理器操作码 2
MCR 指令用于将 ARM 处理器寄存器中的数据传送到协处理器寄存器中,若协处理器不能成
功完成操作,则产生未定义指令异常。其中协处理器操作码 1 和协处理器操作码 2 为协处理
LDR R0,[R1,R2] ! ;将存储器地址为 R1+R2 的字数据读入寄存器 R0,并将新地址 R1
+R2 写入 R1
LDR R0,[R1,#8] ! ;将存储器地址为 R1+8 的字数据读入寄存器 R0,并将新地址 R1
+8 写入 R1。
LDR R0,[R1],R2
;将存储器地址为 R1 的字数据读入寄存器 R0,并将新地址 R1

常见汇编命令英文缩写

常见汇编命令英文缩写

常见汇编命令英文缩写通用寄存器:AX,BX,CX,DX。

段寄存器:代码段寄存器CS--code segment , 数据段寄存器DS--data segment , 堆栈段寄存器SS--stack segment ,附加段寄存器ES--extra segment 。

特殊功能寄存器:指令指针寄存器IP--instruction pointer ,堆栈指针SP--stack pointer ,基址指针BP--base pointer ,源变址寄存器SI--source index ,目标变址寄存器DI--destination index ,标志寄存器FR--flag register(或者叫程序状态字PSW--program status word)。

PSW常用的标志有:标志值为1时的标记值为0时的标记OF(overflow flag) OV(overflow) NV(not overflow)ZF(zero flag) ZR(zero) NZ(not zero)PF(parity flag) PE(parity even) PO(parity odd)CF(carry flag) CY(carried) NC(not carried)DF(direction flag) DN(down) UP(up)SF(sign flag) NG(negtive) PL(plus)TF(trap flag)IF(interrupt flag)AF(auxiliary flag)1.通用数据传送指令.MOV----> moveMOVSX---->extended move with sign dataMOVZX---->extended move with zero dataPUSH---->pushPOP---->popPUSHA---->push allPOPA---->pop allPUSHAD---->push all dataPOPAD---->pop all dataBSWAP---->byte swapXCHG---->exchangeCMPXCHG---->compare and changeXADD---->exchange and addXLAT---->translate2.输入输出端口传送指令.IN---->inputOUT---->output3.目的地址传送指令.LEA---->load effective addressLDS---->load DSLES---->load ESLFS---->load FSLGS---->load GSLSS---->load SS4.标志传送指令.LAHF---->load AH from flagSAHF---->save AH to flagPUSHF---->push flagPOPF---->pop flagPUSHD---->push dflagPOPD---->pop dflag二、算术运算指令ADD---->addADC---->add with carryINC---->increase 1AAA---->ascii add with adjustDAA---->decimal add with adjustSUB---->substractSBB---->substract with borrowDEC---->decrease 1NEC---->negativeCMP---->compareAAS---->ascii adjust on substractDAS---->decimal adjust on substract MUL---->multiplicationIMUL---->integer multiplicationAAM---->ascii adjust on multiplication DIV---->divideIDIV---->integer divideAAD---->ascii adjust on divideCBW---->change byte to wordCWD---->change word to double wordCWDE---->change word to double word with sign to EAXCDQ---->change double word to quadrate word三、逻辑运算指令———————————————————————————————————————AND---->andOR---->orXOR---->xorNOT---->notTEST---->testSHL---->shift leftSAL---->arithmatic shift leftSHR---->shift rightSAR---->arithmatic shift rightROL---->rotate leftROR---->rotate rightRCL---->rotate left with carryRCR---->rotate right with carry四、串指令———————————————————————————————————————MOVS---->move stringCMPS---->compare stringSCAS---->scan stringLODS---->load stringSTOS---->store stringREP---->repeatREPE---->repeat when equalREPZ---->repeat when zero flagREPNE---->repeat when not equalREPNZ---->repeat when zero flagREPC---->repeat when carry flagREPNC---->repeat when not carry flag五、程序转移指令———————————————————————————————————————1>无条件转移指令(长转移)JMP---->jumpCALL---->callRET---->returnRETF---->return far2>条件转移指令(短转移,-128到+127的距离内) JAE---->jump when above or equalJNB---->jump when not belowJB---->jump when belowJNAE---->jump when not above or equalJBE---->jump when below or equalJNA---->jump when not aboveJG---->jump when greaterJNLE---->jump when not less or equalJGE---->jump when greater or equalJNL---->jump when not lessJL---->jump when lessJNGE---->jump when not greater or equal JLE---->jump when less or equalJNG---->jump when not greaterJE---->jump when equalJZ---->jump when has zero flagJNE---->jump when not equalJNZ---->jump when not has zero flagJC---->jump when has carry flagJNC---->jump when not has carry flagJNO---->jump when not has overflow flag JNP---->jump when not has parity flagJPO---->jump when parity flag is oddJNS---->jump when not has sign flagJO---->jump when has overflow flagJP---->jump when has parity flagJPE---->jump when parity flag is evenJS---->jump when has sign flag3>循环控制指令(短转移)LOOP---->loopLOOPE---->loop equalLOOPZ---->loop zeroLOOPNE---->loop not equalLOOPNZ---->loop not zeroJCXZ---->jump when CX is zeroJECXZ---->jump when ECX is zero4>中断指令INT---->interruptINTO---->overflow interruptIRET---->interrupt return5>处理器控制指令HLT---->haltWAIT---->waitESC---->escapeLOCK---->lockNOP---->no operationSTC---->set carryCLC---->clear carryCMC---->carry make changeSTD---->set directionCLD---->clear directionSTI---->set interruptCLI---->clear interrupt六、伪指令—————————————————————————————————————DW---->definw wordPROC---->procedureENDP---->end of procedureSEGMENT---->segmentASSUME---->assumeENDS---->end segmentEND---->end。

leave汇编指令 -回复

leave汇编指令 -回复

leave汇编指令-回复如何使用leave汇编指令。

汇编语言是一种低级编程语言,用于与计算机硬件进行交互。

在汇编语言中,一条汇编指令代表着一条机器码指令,可以直接执行在操作系统和硬件上。

leave指令是一种常用的汇编指令,用于帮助程序在函数返回时恢复栈帧的状态。

在理解leave指令之前,我们首先需要了解栈的概念。

栈是计算机中一种常见的数据结构,类似于一叠盘子,可以在顶部添加和移除数据。

栈通常用于存储函数调用时的局部变量、参数和返回地址等信息。

在许多汇编语言中,栈被实现为一块内存区域,以线性方式存储数据。

栈帧是每个函数所需的一块内存区域,用于存储局部变量和其他与函数调用相关的数据。

当函数调用时,栈帧会被分配一块新的内存区域;当函数返回时,栈帧会被释放。

在x86架构中,leave指令用于将当前栈帧释放,并从调用函数的栈帧中恢复状态。

它通常用于函数的最后一条指令,以便正确地返回到调用函数。

那么,具体如何使用leave指令呢?下面我们将一步一步回答这个问题。

1. 首先,需要将待执行的汇编代码保存在一个文本文件中,例如hello.asm。

2. 打开一个汇编器,比如NASM (Netwide Assembler)。

3. 使用汇编器将汇编代码转换为机器码。

可以打开终端或命令提示符窗口,并导航到存储了hello.asm文件的目录下。

然后,运行以下命令:nasm -f elf hello.asm -o hello.o这将使用NASM将hello.asm代码编译成目标文件hello.o。

4. 现在,我们需要一个连接器,将目标文件与所需的库文件链接起来。

可以使用GNU链接器ld,并运行以下命令:ld -m elf_i386 hello.o -o hello这将使用ld将hello.o与所需的库文件链接起来,并生成可执行文件hello。

5. 现在,我们可以运行生成的可执行文件hello,并查看其输出结果了。

可以在终端或命令提示符窗口中运行以下命令:./hello这将执行hello,并显示输出结果。

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

11、BSWAP(字节交换)
写法:bswap reg32 作用:将 reg32 的第 0 与第 3 个字节,第 1 与第 2 个字节进行交换。 示例:设 EAX=12345678h 执行 bswap eax;后,eax=78563412H
12、XLAT(换码)
写法:XLAT; 作用:AL=DS:[bx+AL] 将 DS:BX 所指内存中的由 AL 指定位移处的一个字节赋值给 AL。原来它的主要用途是查表。注意可以给它提供操作
13、ADD(加法)
写法:ADD reg/mem reg/mem/imm 作用:将后面的操作数加到前面的操作数中 注意:两个操作数必须类型匹配,并且不能同时是内存操作数 ADC (带进位加法) 写法:ADC reg/mem, reg/mem/imm ; 作用:dest=dest+src+cf 当 CF=0 时 ADD 与 ADC 的作用是相同的。 示例:实现 64 位数 EDX:EAX 与 ECX:EBX 的加法: Add EAX,EBX; ADC EDX,ECX;
写法:NEG reg/mem 作用:求补就是求相反数,即:dest=0-dest;
20、CMPXCHG(比较交换)
写法:CMPXCHG reg/mem, reg;
作用:AL/AX/EAX-oprd1,如果等于 0,则 oprd1=oprd2,否则,AL/AX/EAX=oprd1; 即:比较 AL/AX/EAX 与第一个操作数,如果相等,则置 ZF=1,并复制第二个操作数给第一个操作数;否则,置 ZF=0, 并复制第一个操作数给 AL/AX/EAX。 说明:CMPXCHG 主要为实现原子操作提供支持 CMPXCHG8B(8 字节比较交换指令) 写法:CMPXCHG8B MEM64; 功能:将 EDX:EAX 中的 64 位数与内存的 64 位数进行比较,如果相等,则置 ZF=1,并存储 ECX:EBX 到 mem64 指定 的内存地址;否则,置 ZF=0,并设置 EDX:EAX 为 mem64 的 8 字节内容
9、LAHF\SAHF(标志寄存器传送指令)
写法:lahf; 作用:AH=FLAGS 的低 8 位 写法:sahf; 作用:FLAGS 的低 8 位=AH
10、符号扩展和零扩展指令
CBW;AL 符号扩展为 AX CWD;AX 符号扩展为 32 位数 DX:AX CWDE;AX 符号扩展为 EAX; CDQ:EAX 符号扩展为 64 位数 EDX:EAX MOVSX(符号扩展指令的一般形式) 写法:MOVSX reg16\32,reg8\reg16\mem8\mem16 作用:用来将 8 位符号扩展到 16 位,或者 16 位符号扩展到 32 位 MOVZX(零扩展指令) 写法:MOVZX reg16\32,reg8\reg16\mem8\mem16 零扩展,就是高位补 0 进行扩展。通常用在将数据复制到一个不同的寄存器中,如 AL 零扩展为 EBX。相同寄存器的 零扩展,可以使用 MOV 高位, 0 来实现。
3、
LEA(装入有效地址)
指令写法:LEZ reg16,mem 功能描述:将有效地址 MEM 的值装入到 16 位的通用寄存器中。 写法示例:假定 bx=5678H,EAX=1,EDX=2 Lea si,2[bx] ;si=567AH Lea di,2[eax][edx] ;di=5 注意,这里装入的是有效地址,并不是实际的内存中的数值,如果要想取内存中该地址对应的数值,还需要加上段 地址才行,而段地址有可能保存在 DS 中,也有可能保存在 SS 或者 CS 中哦:>不知道我的理解可正确。 。 。 。
写法:POP reg16(32)/seg/mem16(32) 【不能出栈到 CS 中】 功能描述:将堆栈口的 16(32)位数据推出到通用寄存器/段寄存器/内存中,即: 寄存器/段寄存器/内存= SS:[SP] SP=SP+2(当将 32 位数值出栈时,SP=SP+4) (注意,不能出栈给立即数,常量不可 变)
1、
MOV(传送)
指令写法:MOV target,source 功能描述:将源操作数 source 的值复制到 target 中去,source 值不变 注意事项:1)target 不能是 CS(代码段寄存器) ,我的理解是代码段不可写,只可读,所以相应这地方也不能对 CS 执行复制操作。2)target 和 source 不能同时为内存数、段寄存器(CS\DS\ES\SS\FS\GS)3)不能将立即数传送给段寄 存器 4)target 和 source 必须类型匹配,比如,要么都是字节,要么都是字或者都是双字等。4)由于立即数没有明 确的类型,所以将立即数传送到 target 时,系统会自动将立即数零扩展到与 target 数的位数相同,再进行传送。有 时,需要用 BYTE PTR 、WORD PTR、 DWORD PTR 明确指出立即数的位数 写法示例:MOV dl,01H;MOV eax,[bp]; eax =ss:[bp] 双字传送。
21、MUL(无符号乘法)
写法:MUL reg/mem; 作用:当操作数为 8 位时,AX=AL*src; 当操作数为 16 位时,DX:AX=AX*src; 当操作数为 32 位时,EDX:EAX=EAX*src;
22、IMUL(带符号位乘法)
写法:IMUL reg/mem; (作用同上) IMUL reg16,reg16/mem16,imm16; IMUL reg32,reg32/mem32,imm32; IMUL reg16,imm16/reg16/imm16; IMUL reg32,reg32/mem32/imm32; 注意:没有两个操作数均为 8 位的多操作数乘法。 对于同一个二进制数,采用 MUL 和 IMUL 执行的结果可能不同,设 AL=0FF,BL=1,分别执行下面的指令,会得到不 同的结果: Mul bl; AX=0FFH(255); Imul bl; AX=0FFFFH(-1) (高一半为低一半的扩展)
7、
PUSHA、PUSHAD、POPA、POPAD
作用:将所有 16/32 位通用寄存器进栈/出栈 如:PUSHA ;将 AX、CX、DX、BX、原 SP、BP、SI、DI 依次进栈。POPA 出栈顺序正好相反,但要注意的是,弹出到 SP 的值被丢弃,SP 通过增加 16 位来恢复(不然栈顶地址就被修改了,就会出息不对齐的情况,就有可能乱套) POPAD PUSHAD 一样,只不过是 32 码就是一种十进制数的二进制编码表示,分为压缩 BCD 码和非压缩 BCD 码,压缩 BCD 码用 4 个二进制位表示 一个十进制位,即用 0000B~1001B 表示十进制 0~9,如 0110 0100 0010 1001B 表示 6429 用 8 位二进制来表示一个十进制叫非压缩 BCD 码,其中,低四位与压缩 BCD 码相同,高四位无意义。 压缩 BCD 码调整指令包括 DAA(加法的压缩 BCD 码调整)和 DAS(减法的压缩 BCD 码调整) 写法: DAA; 作用:调整 AL 中的和为压缩 BCD 码。 功能:使用 DAA 指令时,通常先执行 ADD/ADC 指令,将两个压缩 BCD 码相加,结果存放在 AL 中,然后使用该指令 将 AL 调整为压缩 BCD 码格式。
2、
XCHG(交换)
指令写法:XCHG object1,object2 功能描述:交换 object1 与 object2 的值 注意事项:1)不能直接交换两个内存数的值 2)类型必须匹配 3)两个操作数任何一个都不能是段寄存器【看来段 寄存器的写入的限制非常的严格,MOV 指令也不能对段寄存器进行写入】 ,4)必须是通用寄存器(ax、bx、cx、dx、 si、di)或内存数 写法示例:XCHG ax,[bx][si]; XCHG ax,bx;
数,用来指定使用哪个段地址,如: XLAT ES:table;使用 ES 来作为段地址,table 不起作用。 XLAT table ;使用 table 所在段对应的段寄存器作为段地址。 ----------------------------------算术指令-----------------------------------------------
14、INC(自加一)
写法:INC reg/mem; 作用:dest=dest+1;
15、XADD(交换加)
写法:XADD reg/mem, reg 作用:先将两个数交换,然将二者之和送给第一个数
16、SUB(减法)
写法:SUB reg/mem, reg/mem/imm; 作用:dest=dest-src; SBB(带借位减法) 写法:SBB reg/mem, reg/mem/imm 作用:dest=dest-src-cf; 注意:两个操作数必须类型匹配,且不能同时是内存数
5、
PUSH(进栈)
写法:PUSH reg16(32)/seg/mem16(32)/imm 功能描述:将通用寄存器/段寄存器/内存数/立即数的值压入栈中,即: SP=SP-2 SS:[SP]=16 位数值(当将 32 位数值压入栈中时,SP=SP-4,SS:[SP]=32 为数值)
6、
POP(出栈)
8、
PUSHF、PUSHFD、POPF、POPFD
功能描述:标志寄存器 FLAGS(EFLAGS)进栈或出栈 如:PUSHF ;FLAGS 进栈 POPF; 栈顶字出栈到 FLAGS 总结下,POP 和 PUSH 通常可以用来交换两个寄存器的值,也可以用来保护寄存器的值,如下: 交换 ax 与 cx 的值:push ax;push cx;pop ax; pop cx; 保护寄存器:push ax;push cx;„.中间有很多执行的代码„pop cx;pop ax;
23、DIV(无符号除法 )/IDIV(带符号数除法)
写法:DIV reg/mem;/IDIC reg/mem 作用:如果操作数是 8 位,AX%SRC,结果商在 AL、余数在 AH 中; 如果操作数是 16 位,DX:AX%SRC,结果商在 AX,余数在 DX 中; 如果操作数是 32 位,EDX:EAX%SRC,结果商在 EAX,余数在 EDX 中; 注意:不能直接实现 8 位数除 8 位数、16 位数除 16 位数、32 除 32,若需要这样,则必须先把除数符号扩展或零扩 展到 16、32、64 位,然后用除法指令。 对于 IDIV,余数和被除数符号相同,如:-5 IDIV 2 = 商 -2,余数:-1; 在下列情况下,会使 CPU 产生中断:一:除数为 0 ;二:由于商太大,导致 EAX\AX 或 AL 不能容纳,从而产生了 溢出。 -----------------BCD 码调整指令(十进制调整指令)-----------------------------------------------
相关文档
最新文档