第三章 汇编语言程序设计基础
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
LODS/LODSB/LODSW(load Byte or Word String)取字 节串或字串。
以上各条指令前均可使用重复前缀指令,与上述基本指令配 合使用的前缀有: REP(repeat)重复 REPE/REPZ(repeat while equal/zero)相等/为零则
重复 REPNE/REPNZ(repeat while not equal/not zero)不
JCXZ(Jump if register CX=0)若寄存器(CX)=0,则 转移。
3.3 源程序典型结构
本节的目的在于告诉读者,如何书写一个完整的汇编 语言源程序。
一个标准的单模块汇编语言源程序 书写形式示例
段寄存器初值的设置 DOS 下汇编语言程序的正常结束
第一节 DATA SEGMENT
RET(RETurn from procedure)从过程返回。(从子程序 返回)。
JMP(JUMP)转移
2、条件转移指令
其中“高于和低于”适用于操作数为无符号数的判别。例如 0FFH高于 05H。而‘大于和小于”是用于操作数为带符号数 的判别。例如 0FFH小于 05H。因为前者为-1。 条件指令常在比较或减法指令之后使用。
A.EXE 文件
计算机上运行汇编语言程序的步骤是: 1)用编辑程序建立.ASM源文件; 2)用MASM程序把.ASM文件转换成.OBJ文件; 3)用 LINK程序把 .OBJ文件转换成.EXE文件; 4)在操作系统环境下直接键入文件名就可执行该程
序。
3.2 8086指令系统
8086/8088的指令系统按功能可以分为六类: 数据传送 算术运算 逻辑运算与移位 字符串处理 控制转移以及处理器控制
代码指令------用“0”或“1”形式表示的机器指令, 是机器指令的数据表示形式,是能被计算机直接识别 和执行的二进制代码串。
机器语言程序------用机器语言或代码语言编写的程序。 指令系统------计算机全部指令的集合。
优点:能被计算机直接理解和执行; 缺点:编程繁琐,不直观,难记忆,易出错,难查错。
1)判断无符号数大小的条件转移指令
① JA/JNBE(jump if not blow or equal , or above) JA指令(高于转移) JNBE指令(不低于等于转移)
② JBE/JNA(jump if blow or equal , or not above) JBE指令(低于或等于转移) JNA指令(不高于转移)
2、减法指令
SUB(subtract)字节或字相减 SBB(subtract with borrow)带借位的字节或字相减 DEC(decrement)字节或字减1 NEG(negate)字节或字求补 CMP(compare)字节或字的比较 AAS(ASCII adjust for subtraction)减法的ASCII码调
③ JAE/JNB(jump if not blow, or above or equal) JAE指令(高于等于转移) JNB指令(不低于转移)
④ JB/JNAE(jump if blow, or not above or equal) JB指令(低于转移) JNAE指令(不高于等于转移)
2)判断带符号数大小的条件转移指令
MOV DS,AX
MOV ES,AX
……
MOV AH,4CH;返回操作系统
INT 21H
CODE ENDS
END START
说明:
一个汇编语言源程序由若干逻辑段组成,一般由数据段、 堆栈段、代码段组成。
程序中数据段、堆栈段根据实际情况可以有也可以没有, 但是任何一个源程序至少必须有一个逻辑代码段和一条作 为源程序文件结束的伪指令END。
2.汇编指令
汇编指令----用来表示机器指令的助记符。每一条机器指令 对应一条汇编指令。
汇编语言(Assembly Language) -百度文库--由助记符构成的 指令系统。
汇编语言源程序----用汇编语言编写的程序。 “汇编”(Assemble)----将汇编语言程序和高级语言程
序翻译成机器语言程序的过程。 汇编程序----完成汇编的程序(MASM.EXE)
4)测试PF
① JP/JPE(jump if parity, or parity even)指令(为偶转 移)
② JNP/JPO(jump if not parity, or parity odd)(为奇转 移)
5)测试OF
① JO(jump if overflow)指令(溢出转移) ② JNO(jump if not overflow)指令(未溢出转移)
相等/不为零则重复
格式为:重复前缀 串操作指令 目的串,源串
第五节 控制转移指令类
8086/8088指令系统中有一组指令用于控制程 序的转移,这些指令有的只修改IP的内容,有的 则同时修改IP和CS的内容。这组控制程序转移 的指令可再分为三组。
1、无条件转移指令
CALL(CALL a Procedure)调用一个过程指令(转子指 令)。
3、测试某个标志的条件转移指令
1)测试ZF
① JE/JZ(jump if zero, or equal) JE指令(相等则转移) JZ指令(等于0转移)
② JNE/JNZ(jump if not zero, or not equal) JNE指令(不相等则转移) JNZ指令(不等于0转移)
2)测试CF
③ JL/JNGE(jump if less, or not greater or equal ) JL指令(小于转移) JNGE指令(不大于等于转移)
④ JLE/JNG(jump if less or equal, or not greater) JLE指令(小于等于转移) JNG指令(不大于转移)
4、迭代控制指令
这些指令用来完成循环控制的判断转移操作。其转移的目的地 址必须在相对该指令的下一指令所在地址位移-128~+127 范围内.
格式:LOOP循环标号
LOOPE/LOOPZ(LOOP if equal/zero)若相等/为0,则 循环。
LOOPNE/LOOPNZ(LOOP if not equal/not zero)若不 相等/不为0,则循环。
ASCII码调整
4、除法指令
DIV(unsigned divide)无符号二进制数相除 IDIV(signed divide)带符号二进制数相除 AAD(ASCII adjust for division)除法的ASCII码调
整 CBW(convert byte to word)字节变换为字 CWD(convert word to double word)字变换为双字
整 DAS(decimal adjust for subtraction)减法的十进制
调整
3、乘法指令
MUL(unsigned multiple)无符号二进制数相乘 IMUL(signed multiple)带符号二进制数相乘 AAM(ASCII adjust for multiplication)乘法的
第三节 逻辑运算和移位类
1、逻辑运算指令
NOT(not)字节或字求反 AND(and)字节或字逻辑与 OR(or)字节或字逻辑或 XOR(exclusive or)字节或字逻辑异或 TEST(test)字节或字的测试
2、移位和循环移位指令
SHL (shift logical left)逻辑左移 SAL(shift arithmetic left)算术左移 SHL(shift logical right)逻辑右移 SAR(Shift arithmetic right)算术右移 ROL(rotate left)循环左移 ROR(rotate right)循环右移 RCL(rotate left through carry)带进位循环左移 RCR(rotate right through carry)带进位循环右移
4、标志寄存器传送指令
LAHF(1oad AH with flags)标志送 AH SAHF(store AH into flags) AH送标志寄存器 PUSHF(push the flags)标志进栈 POPF(pop the flags )标志出栈
第二节 算术运算类
1、加法指令
ADD(add)字节或字相加 ADC(add with carry)带进位的字节或字相加 INC(increment)字节或字加1 AAA(ASCII adjust for addition)加法的ASCII码调整 DAA(decimal adjust for addition) 加法的十进制调整
2、累加器专用指令
IN(input)输入 OUT(output)输出 XLAT(translate)换码
3、地址传送指令
LEA(load effective address)有效地址送寄存器 LDS(load DS with pointer)指针送寄存器和 DS LES(load ES with pointer)指针送寄存器和 ES
CMPS/CMPSB/CMPSW(compare Byte or Word String) 比较字节或字串。
SCAS/SCASB/SCASW(scan byte or word string)搜索 字节串或字串。
STOS/STOSB/STOSW(store byte or word string)存 字节串或字串。
……;
标准;定单义数模据段块汇编语言程序
书写形式示例 DATA ENDS
STACK SEGMENT STACK;定义堆栈段
……;
STACK ENDS
CODE SEGMENT
;定义代码段
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
START: MOV AX,DATA;
优点:编写的程序生成的目标代码精简,占内存少,执行速 度快;
缺点:程序所要解决的问题与数学模型之间的关系不直观, 程序设计和调试的时间也比较长,可移植性较差。
适应场合:内存容量和速度要求比较高
3.编语言程序建立及处理过程
编辑程序 EDIT
A.ASM 文件
汇编程序 MASM
A.OBJ 文件
连接程序 LINK
① JG/JNLE(jump if greater, or not less or equal) JG指令(大于转移) JNLE措令(不小于等于转移)
② JGE/JNL(jump if greater or equal, or not less) JGE指令(大于等于转移) JNL指令(不小于转移)
第四节 字符串处理类
8086/8088指令系统为文件处理提供了一组强 有力的指令(字符处理指令)。 文件处理----对一系列含有字母数字代码的字节 (也称字符串)进行处理,例如传送、比较、查 找、插入、删除等,字符串指令为这些处理提供 了很大方便。
MOVS/MOVSB/MOVSW(Move Byte string or move word string)传送字节串或字串。
① JC(jump if carry): 当满足CF=1时,转移到目标地址。 ② JNC(jump if not carry):当满足CF=0时,转移到目标地址。
3、测试某个标志的条件转移指令
3)测试SF
① JS(jump if sign)指令(为负转移) ② JNS(jump if not sign)指令(为正转移)
第一节 数据传送类
这类指令用于实现存储器与寄存器、寄存 器与寄存器, AL/AX与 I/O端口、立即数 到寄存器或存储器的字节或字的传送,共 有14条指令,可分为四组。
1、通用数据传送指令
MOV(move)传送 PUSH(push into the stack)进栈 POP(pop from the stack)出栈 XCHG(exchange)交换
第3章 汇编语言程序设计基础
3.1 基本概念 3.2 8086指令系统 3.3 源程序典型结构 3.4 变量、程序中数据组织
3.1 基本概念
1.机器指令和代码指令
机器指令------是能为计算机所能接受的一组代码。它 指出计算机所要进行的操作及其操作对象。机器指令 是由二进制代码组成的。
以上各条指令前均可使用重复前缀指令,与上述基本指令配 合使用的前缀有: REP(repeat)重复 REPE/REPZ(repeat while equal/zero)相等/为零则
重复 REPNE/REPNZ(repeat while not equal/not zero)不
JCXZ(Jump if register CX=0)若寄存器(CX)=0,则 转移。
3.3 源程序典型结构
本节的目的在于告诉读者,如何书写一个完整的汇编 语言源程序。
一个标准的单模块汇编语言源程序 书写形式示例
段寄存器初值的设置 DOS 下汇编语言程序的正常结束
第一节 DATA SEGMENT
RET(RETurn from procedure)从过程返回。(从子程序 返回)。
JMP(JUMP)转移
2、条件转移指令
其中“高于和低于”适用于操作数为无符号数的判别。例如 0FFH高于 05H。而‘大于和小于”是用于操作数为带符号数 的判别。例如 0FFH小于 05H。因为前者为-1。 条件指令常在比较或减法指令之后使用。
A.EXE 文件
计算机上运行汇编语言程序的步骤是: 1)用编辑程序建立.ASM源文件; 2)用MASM程序把.ASM文件转换成.OBJ文件; 3)用 LINK程序把 .OBJ文件转换成.EXE文件; 4)在操作系统环境下直接键入文件名就可执行该程
序。
3.2 8086指令系统
8086/8088的指令系统按功能可以分为六类: 数据传送 算术运算 逻辑运算与移位 字符串处理 控制转移以及处理器控制
代码指令------用“0”或“1”形式表示的机器指令, 是机器指令的数据表示形式,是能被计算机直接识别 和执行的二进制代码串。
机器语言程序------用机器语言或代码语言编写的程序。 指令系统------计算机全部指令的集合。
优点:能被计算机直接理解和执行; 缺点:编程繁琐,不直观,难记忆,易出错,难查错。
1)判断无符号数大小的条件转移指令
① JA/JNBE(jump if not blow or equal , or above) JA指令(高于转移) JNBE指令(不低于等于转移)
② JBE/JNA(jump if blow or equal , or not above) JBE指令(低于或等于转移) JNA指令(不高于转移)
2、减法指令
SUB(subtract)字节或字相减 SBB(subtract with borrow)带借位的字节或字相减 DEC(decrement)字节或字减1 NEG(negate)字节或字求补 CMP(compare)字节或字的比较 AAS(ASCII adjust for subtraction)减法的ASCII码调
③ JAE/JNB(jump if not blow, or above or equal) JAE指令(高于等于转移) JNB指令(不低于转移)
④ JB/JNAE(jump if blow, or not above or equal) JB指令(低于转移) JNAE指令(不高于等于转移)
2)判断带符号数大小的条件转移指令
MOV DS,AX
MOV ES,AX
……
MOV AH,4CH;返回操作系统
INT 21H
CODE ENDS
END START
说明:
一个汇编语言源程序由若干逻辑段组成,一般由数据段、 堆栈段、代码段组成。
程序中数据段、堆栈段根据实际情况可以有也可以没有, 但是任何一个源程序至少必须有一个逻辑代码段和一条作 为源程序文件结束的伪指令END。
2.汇编指令
汇编指令----用来表示机器指令的助记符。每一条机器指令 对应一条汇编指令。
汇编语言(Assembly Language) -百度文库--由助记符构成的 指令系统。
汇编语言源程序----用汇编语言编写的程序。 “汇编”(Assemble)----将汇编语言程序和高级语言程
序翻译成机器语言程序的过程。 汇编程序----完成汇编的程序(MASM.EXE)
4)测试PF
① JP/JPE(jump if parity, or parity even)指令(为偶转 移)
② JNP/JPO(jump if not parity, or parity odd)(为奇转 移)
5)测试OF
① JO(jump if overflow)指令(溢出转移) ② JNO(jump if not overflow)指令(未溢出转移)
相等/不为零则重复
格式为:重复前缀 串操作指令 目的串,源串
第五节 控制转移指令类
8086/8088指令系统中有一组指令用于控制程 序的转移,这些指令有的只修改IP的内容,有的 则同时修改IP和CS的内容。这组控制程序转移 的指令可再分为三组。
1、无条件转移指令
CALL(CALL a Procedure)调用一个过程指令(转子指 令)。
3、测试某个标志的条件转移指令
1)测试ZF
① JE/JZ(jump if zero, or equal) JE指令(相等则转移) JZ指令(等于0转移)
② JNE/JNZ(jump if not zero, or not equal) JNE指令(不相等则转移) JNZ指令(不等于0转移)
2)测试CF
③ JL/JNGE(jump if less, or not greater or equal ) JL指令(小于转移) JNGE指令(不大于等于转移)
④ JLE/JNG(jump if less or equal, or not greater) JLE指令(小于等于转移) JNG指令(不大于转移)
4、迭代控制指令
这些指令用来完成循环控制的判断转移操作。其转移的目的地 址必须在相对该指令的下一指令所在地址位移-128~+127 范围内.
格式:LOOP循环标号
LOOPE/LOOPZ(LOOP if equal/zero)若相等/为0,则 循环。
LOOPNE/LOOPNZ(LOOP if not equal/not zero)若不 相等/不为0,则循环。
ASCII码调整
4、除法指令
DIV(unsigned divide)无符号二进制数相除 IDIV(signed divide)带符号二进制数相除 AAD(ASCII adjust for division)除法的ASCII码调
整 CBW(convert byte to word)字节变换为字 CWD(convert word to double word)字变换为双字
整 DAS(decimal adjust for subtraction)减法的十进制
调整
3、乘法指令
MUL(unsigned multiple)无符号二进制数相乘 IMUL(signed multiple)带符号二进制数相乘 AAM(ASCII adjust for multiplication)乘法的
第三节 逻辑运算和移位类
1、逻辑运算指令
NOT(not)字节或字求反 AND(and)字节或字逻辑与 OR(or)字节或字逻辑或 XOR(exclusive or)字节或字逻辑异或 TEST(test)字节或字的测试
2、移位和循环移位指令
SHL (shift logical left)逻辑左移 SAL(shift arithmetic left)算术左移 SHL(shift logical right)逻辑右移 SAR(Shift arithmetic right)算术右移 ROL(rotate left)循环左移 ROR(rotate right)循环右移 RCL(rotate left through carry)带进位循环左移 RCR(rotate right through carry)带进位循环右移
4、标志寄存器传送指令
LAHF(1oad AH with flags)标志送 AH SAHF(store AH into flags) AH送标志寄存器 PUSHF(push the flags)标志进栈 POPF(pop the flags )标志出栈
第二节 算术运算类
1、加法指令
ADD(add)字节或字相加 ADC(add with carry)带进位的字节或字相加 INC(increment)字节或字加1 AAA(ASCII adjust for addition)加法的ASCII码调整 DAA(decimal adjust for addition) 加法的十进制调整
2、累加器专用指令
IN(input)输入 OUT(output)输出 XLAT(translate)换码
3、地址传送指令
LEA(load effective address)有效地址送寄存器 LDS(load DS with pointer)指针送寄存器和 DS LES(load ES with pointer)指针送寄存器和 ES
CMPS/CMPSB/CMPSW(compare Byte or Word String) 比较字节或字串。
SCAS/SCASB/SCASW(scan byte or word string)搜索 字节串或字串。
STOS/STOSB/STOSW(store byte or word string)存 字节串或字串。
……;
标准;定单义数模据段块汇编语言程序
书写形式示例 DATA ENDS
STACK SEGMENT STACK;定义堆栈段
……;
STACK ENDS
CODE SEGMENT
;定义代码段
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
START: MOV AX,DATA;
优点:编写的程序生成的目标代码精简,占内存少,执行速 度快;
缺点:程序所要解决的问题与数学模型之间的关系不直观, 程序设计和调试的时间也比较长,可移植性较差。
适应场合:内存容量和速度要求比较高
3.编语言程序建立及处理过程
编辑程序 EDIT
A.ASM 文件
汇编程序 MASM
A.OBJ 文件
连接程序 LINK
① JG/JNLE(jump if greater, or not less or equal) JG指令(大于转移) JNLE措令(不小于等于转移)
② JGE/JNL(jump if greater or equal, or not less) JGE指令(大于等于转移) JNL指令(不小于转移)
第四节 字符串处理类
8086/8088指令系统为文件处理提供了一组强 有力的指令(字符处理指令)。 文件处理----对一系列含有字母数字代码的字节 (也称字符串)进行处理,例如传送、比较、查 找、插入、删除等,字符串指令为这些处理提供 了很大方便。
MOVS/MOVSB/MOVSW(Move Byte string or move word string)传送字节串或字串。
① JC(jump if carry): 当满足CF=1时,转移到目标地址。 ② JNC(jump if not carry):当满足CF=0时,转移到目标地址。
3、测试某个标志的条件转移指令
3)测试SF
① JS(jump if sign)指令(为负转移) ② JNS(jump if not sign)指令(为正转移)
第一节 数据传送类
这类指令用于实现存储器与寄存器、寄存 器与寄存器, AL/AX与 I/O端口、立即数 到寄存器或存储器的字节或字的传送,共 有14条指令,可分为四组。
1、通用数据传送指令
MOV(move)传送 PUSH(push into the stack)进栈 POP(pop from the stack)出栈 XCHG(exchange)交换
第3章 汇编语言程序设计基础
3.1 基本概念 3.2 8086指令系统 3.3 源程序典型结构 3.4 变量、程序中数据组织
3.1 基本概念
1.机器指令和代码指令
机器指令------是能为计算机所能接受的一组代码。它 指出计算机所要进行的操作及其操作对象。机器指令 是由二进制代码组成的。