当前位置:
文档之家› 第三章 汇编语言程序设计基础
第三章 汇编语言程序设计基础
2.汇编指令
汇编指令----用来表示机器指令的助记符。每一条机器指令 对应一条汇编指令。
汇编语言(Assembly Language) ----由助记符构成的 指令系统。
汇编语言源程序----用汇编语言编写的程序。 “汇编”(Assemble)----将汇编语言程序和高级语言程
序翻译成机器语言程序的过程。 汇编程序----完成汇编的程序(MASM.EXE)
LODS/LODSB/LODSW(load Byte or Word String)取字 节串或字串。
以上各条指令前均可使用重复前缀指令,与上述基本指令配 合使用的前缀有: REP(repeat)重复 REPE/REPZ(repeat while equal/zero)相等/为零则
重复 REPNE/REPNZ(repeat while not equal/not zero)不
代码指令------用“0”或“1”形式表示的机器指令, 是机器指令的数据表示形式,是能被计算机直接识别 和执行的二进制代码串。
机器语言程序------用机器语言或代码语言编写的程序。 指令系统------计算机全部指令的集合。
优点:能被计算机直接理解和执行; 缺点:编程繁琐,不直观,难记忆,易出错,难查错。
2、累加器专用指令
IN(input)输入 OUT(output)输出 XLAT(translate)换码
3、地址传送指令
LEA(load effective address)有效地址送寄存器 LDS(load DS with pointer)指针送寄存器和 DS LES(load ES with pointer)指针送寄存器和 ES
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
① 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)指令(为正转移)
③ JL/JNGE(jump if less, or not greater or equal ) JL指令(小于转移) JNGE指令(不大于等于转移)
④ JLE/JNG(jump if less or equal, or not greater) JLE指令(小于等于转移) JNG指令(不大于转移)
优点:编写的程序生成的目标代码精简,占内存少,执行速 度快;
缺点:程序所要解决的问题与数学模型之间的关系不直观, 程序设计和调试的时间也比较长,可移植性较差。
适应场合:内存容量和速度要求比较高
3.编语言程序建立及处理过程
编辑程序 EDIT
A.ASM 文件
汇编程序 MASM
A.OBJ 文件
连接பைடு நூலகம்序 LINK
RET(RETurn from procedure)从过程返回。(从子程序 返回)。
JMP(JUMP)转移
2、条件转移指令
其中“高于和低于”适用于操作数为无符号数的判别。例如 0FFH高于 05H。而‘大于和小于”是用于操作数为带符号数 的判别。例如 0FFH小于 05H。因为前者为-1。 条件指令常在比较或减法指令之后使用。
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)指令(未溢出转移)
JCXZ(Jump if register CX=0)若寄存器(CX)=0,则 转移。
3.3 源程序典型结构
本节的目的在于告诉读者,如何书写一个完整的汇编 语言源程序。
一个标准的单模块汇编语言源程序 书写形式示例
段寄存器初值的设置 DOS 下汇编语言程序的正常结束
第一节 DATA SEGMENT
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指令(不高于转移)
……;
标准;定单义数模据段块汇编语言程序
书写形式示例 DATA ENDS
STACK SEGMENT STACK;定义堆栈段
……;
STACK ENDS
CODE SEGMENT
;定义代码段
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
START: MOV AX,DATA;
整 DAS(decimal adjust for subtraction)减法的十进制
调整
3、乘法指令
MUL(unsigned multiple)无符号二进制数相乘 IMUL(signed multiple)带符号二进制数相乘 AAM(ASCII adjust for multiplication)乘法的
第3章 汇编语言程序设计基础
3.1 基本概念 3.2 8086指令系统 3.3 源程序典型结构 3.4 变量、程序中数据组织
3.1 基本概念
1.机器指令和代码指令
机器指令------是能为计算机所能接受的一组代码。它 指出计算机所要进行的操作及其操作对象。机器指令 是由二进制代码组成的。
2、减法指令
SUB(subtract)字节或字相减 SBB(subtract with borrow)带借位的字节或字相减 DEC(decrement)字节或字减1 NEG(negate)字节或字求补 CMP(compare)字节或字的比较 AAS(ASCII adjust for subtraction)减法的ASCII码调
4、迭代控制指令
这些指令用来完成循环控制的判断转移操作。其转移的目的地 址必须在相对该指令的下一指令所在地址位移-128~+127 范围内.
格式:LOOP循环标号
LOOPE/LOOPZ(LOOP if equal/zero)若相等/为0,则 循环。
LOOPNE/LOOPNZ(LOOP if not equal/not zero)若不 相等/不为0,则循环。
① JG/JNLE(jump if greater, or not less or equal) JG指令(大于转移) JNLE措令(不小于等于转移)
② JGE/JNL(jump if greater or equal, or not less) JGE指令(大于等于转移) JNL指令(不小于转移)
第三节 逻辑运算和移位类
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)带进位循环右移
相等/不为零则重复
格式为:重复前缀 串操作指令 目的串,源串
第五节 控制转移指令类
8086/8088指令系统中有一组指令用于控制程 序的转移,这些指令有的只修改IP的内容,有的 则同时修改IP和CS的内容。这组控制程序转移 的指令可再分为三组。
1、无条件转移指令
CALL(CALL a Procedure)调用一个过程指令(转子指 令)。
A.EXE 文件
计算机上运行汇编语言程序的步骤是: 1)用编辑程序建立.ASM源文件; 2)用MASM程序把.ASM文件转换成.OBJ文件; 3)用 LINK程序把 .OBJ文件转换成.EXE文件; 4)在操作系统环境下直接键入文件名就可执行该程
序。
3.2 8086指令系统
8086/8088的指令系统按功能可以分为六类: 数据传送 算术运算 逻辑运算与移位 字符串处理 控制转移以及处理器控制
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)字变换为双字
4、标志寄存器传送指令
LAHF(1oad AH with flags)标志送 AH SAHF(store AH into flags) AH送标志寄存器 PUSHF(push the flags)标志进栈 POPF(pop the flags )标志出栈
第二节 算术运算类