版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1概述汇编语言基本概念程序汇编连接与调试方法1汇编语言基本概念一、汇编语言相关特征机器语言是一种用二进制代码编写指令和程序的语言例:B004传送指令,将4送到累加器AL中汇编语言用助记符代替指令的操作码,用数字或符号代替指令中操作数或操作数存放位置的一种程序设计语言例:MOVAL,04;传送指令,将4送到累加器AL中
MOVEAX,200209281汇编语言基本概念二、汇编语句行基础知识基本格式
[名字]操作符[操作数][;注释]操作符:机器指令、伪指令、宏指令的助记符操作数:操作数项有多个操作数时,用逗号,分开1汇编语言基本概念汇编语言与机器特性密切相关汇编语言硬件特性CPU工作方式CPU寄存器体系指令系统存储管理机制中断与外部设备…依赖于充分发挥1汇编语言基本概念2、源程序的分段结构及示例说明例:程序输出显示:“
Welcome!”,流程描述如下:定义堆栈段定义数据段定义代码段源程序模块结束指示段寄存器初始化显示输出字符串自动返回DOS源程序SAMPLE.ASM:
STACKSSEGMENTSTACKDW128DUP(?)STACKSENDSDATASSEGMENTSTRINGDB‘Welcome!’,13h,10h,’$’DATASENDSCODESSEGMENTASSUMECS:CODE,DS:DATASSTART:MOVAX,DATASMOVDS,AXLEADX,STRINGMOVAH,09HINT21HMOVAX,4C00HINT21HCODESENDSENDSTART堆栈段数据段代码段源程序模块结束2程序汇编连接与调试方法设计、编写源程序(数据结构+算法+编码)汇编语言源程序文件(*.ASM)目标代码程序文件(*.OBJ)可执行程序文件(*.EXE/*.COM)运行正确?调试运行正确?结束否否否是是调试DEBUG编辑EDIT连接LINK执行汇编MASM2程序汇编连接与调试方法二、程序汇编与连接执行汇编程序MASM.EXEMASM/?查看命令参数连接程序LINK.EXELINK/?查看命令参数汇编连接程序ML.EXEML/?查看命令参数汇编过程:对源程序扫描后生成目标文件.OBJ
如有语法错误,则显示相应的错误信息,返回修改源程序2程序汇编连接与调试方法汇编示例:D:\MASM6>masmp1.asm
显示如下:
Assembling:p1.asmp1.asm(12):errorA2006:undefinedsymbol:FIVE1
表示:源程序12行有错,未定义符号FIVE1
源程序一直到修改后汇编无错误,则生成p1.obj连接:D:\MASM6>linkp1生成执行文件p1.exe则可直接运行:
D:\MASM6>p1
2指令系统指令格式指令寻址方式指令集2.1指令的基本格式
Intel32位处理器指令格式。指令长度不能超过15个字节。
前缀操作码寻址方式位移量立即数
0~3B1~2B0~2B0~4B0~4B16位寻址方式立即寻址寄存器寻址直接寻址寄存器间接寻址寄存器相对寻址基址变址寻址相对基址变址寻址1、非存储器的数据寻址方式示例(1)立即寻址
MOVEAX,19461201H;19461201H->EAX
与16位寻址相似。(2)寄存器寻址MOVEAX,ECX;ECX->EAX
与16位寻址相似2、 存储器的数据寻址方式示例(1)直接寻址MOVEAX,[4612H];EA=4612,(EA)->EAX
与16位寻址相似。(2)寄存器间接寻址MOV[ECX],EDX;[ECX]间接指示存放操作数EA在ECX中,EA=ECX,EDX->EA,与16位寻址相似。存储器的数据寻址方式示例(续)(3)寄存器相对寻址MOVECX,[EAX+24];EA=EAX,(EA)->ECX(4)基址变址寻址MOVEAX,[EBX][ESI];EA=EBX+ESI,(EA)->EAX(5)相对基址变址寻址SUBEAX,[EBX+ESI+0FF0H];EA=EBX+ESI+0FF0H,EAX-(EA)->EAX3.程序转移寻址方式
有相对EIP的段内直接寻址,段内间接寻址、段间直接寻址和段间间接寻址。段内转移是指程序在同一段代码内,仅改变EIP的值而不改变CS的值所发生的转移。而段间转移是程序要从一个代码段转移到另一个代码段,则不仅改变EIP的值,同时也要改变CS的值。无论是段内还是段间发生的转移都有直接和间接的形式,因此程序转移有四种寻址。1.段内直接寻址(IntrasegmentDirectAddressing)
转移偏移地址EA是指令中位移量(与指令指针IP当前内容之和。即:EA=IP+DISP->IP2.段内间接寻址(IntrasegmentIndirectAddressing)
转移偏移地址EA如果指定的是寄存器,则将寄存器的内容->IP。如果指定的是存储器中的一个字,则将该存储单元的内容->IP。段内转移过程段内转移图示段内直接转移和间接转移寻址如下图:段间转移图示程序段间的直接或间接转移如下图:4.前缀代码67H或66H32位机汇编指令或有32位操作数的情形识别涉及指令机器码格式的有关前缀表示。这些在相应的汇编列表文件(*.LST)或DEBUG过程中可以看到,如前缀代码67H或66H。3.3指令系统指令系统是一台机器所有指令的集合。
Pentium系列机指令系统庞大、类型多样,约有300多条指令,其中包括基本指令100多条。具有支持多进程、多任务、虚拟存储器和多媒体等功能的32位指令。常用指令类型集1.数据传送类指令2.算术运算类指令3.逻辑和移位操作类指令4.串操作与重复前缀类指令5.控制转移类指令6.处理机控制类指令7.其它指令本讲义约定:OPD表示目的操作数;OPS表示源操作数;(OPS)表示OPS的内容;(OPD)表示OPD的内容;->表示传送;R表示通用寄存器;Sr表示段寄存器;M表示主存储器;XXXX:XXXX表示组合号,“:”表示其前后组成一个数;L表示操作数的长度;d表示立即数;B/W/D表示字节或字或双字。数据传送类指令通用数据传送指令堆栈操作指令标志寄存器传送指令地址传送指令输入输出指令通用数据传送指令1.传送指令MOV2.数据交换指令XCHG3.查表转换指令
XLAT语句格式:MOVOPD,OPS功能:将源操作数传送入目的地址,源地址内容不变。即(OPS)→OPD。下图描述了MOV指令在传送数据时允许传送的路径及类型。1.传送指令MOV注意:(1)OPD,OPS的类型(8/16/32位)必须一致.(2)OPD不能使用立即数。(3)双操作数不能同时为内存中的数据。(4)段寄存器不能直接送立即数.(5)指令执行后不影响FLAGS的标志位的状态.(6)不能任意改变CS示例:存储器与寄存器间数据传送。MOVAX,BUF;BUF是变量,源操作数为直接寻址MOVBH,[DI];源操作数为寄存器间接寻址MOVDI,ES:3[SI];源操作数为变址寻址,使用跨段前缀MOVBP,3[BX+SI];源操作数为基址加变址寻址MOVBUFA,DL;BUFA是一字节变量MOV[BP],AX;使用SS段寄存器MOVDS:[BP],DL;使用跨段前缀MOVBUF,DS ;BUF是个字变量MOVES,BUF2.数据交换指令XCHG语句格式:XCHGOPD,OPS功能:将源地址与目的地址中的内容互换。即(OPD)→OPS,(OPS)→OPD。寄存器与存储器之间数据交换。MOV AX,5678H ;(AX)=5678HMOV BX,0FFFFH ;(BX)=0FFFFHXCHG AX,BX ;(AX)=0FFFH,(BX)=5678HMOVSX和MOVZX指令格式:MOVSXOPD,OPSMOVZXOPD,OPS它们将OPS的内容->OPD,但是对于OPD左边空缺的位,MOVSX全部用OPS的符号填充(作符号延伸),可以对有符号的数进行符号扩展;而MOVZX是全部以零(0)填充,可对无符号数进行0扩展.
注意:OPD的位数比OPS的位数长示例:MOVCL,88HMOVZXAX,CL;AX=0088HMOVSXBX,CL;BX=FF88H另外也可如下书写指令:MOVSXCX,BLMOVSXEAX,BUFMOVZXAX,CLMOVSXEBX,ALMOVZXESI,BUFMOVZXEDX,DI3.查表转换指令XLA语句格式:XLATOPS或XLAT功能:将(BX)为首址(AL)为位移量的字节存储单元中的数据送AL寄存器。即([BX+AL])→AL。堆栈操作指令1.进栈指令PUSH2.出栈指令POP3.PUSHA/PUSHAD指令4.POPA/POPAD指令1.进栈指令PUSH语句格式:
PUSHOPS;W/D,R/Sr/M/d功能:将寄存器、段寄存器、立即数或存储器中的一个字数据压入堆栈顶部,指令视操作数长度为字(2字节)或双字(4字节)和地址为16位/32位,先将SP/ESP-2/4->SP/ESP,后将OPS->[SP]/[ESP]。2.出栈指令POP语句格式:POPOPD;W/D,R/Sr/M/d功能:视OPD长度为字或双字,先将当前SP/ESP指向的内容->OPD,后将SP/ESP+2/4->SP/ESP。从POP指令功能可看出,该指令为PUSH指令的逆过程,一般成对使用。3.PUSHA/PUSHAD指令格式:PUSHA;压入8个字通用寄存器.PUSHAD;压入8个双字通用寄存器.4.POPA/POPAD指令格式:POPA;弹出到8个16位通用寄存器
POPAD;弹出到8个32位通用寄存器标志寄存器传送指令1.标志送AH指令LAHF2.AH送标志指令SAHF3.标志寄存器进栈指令PUSHF4.标志寄存器出栈指令POPF1.标志送AH指令LAHF语句格式:LAHF功能:将标志寄存器的低8位送入AH寄存器。即(FLAGS)7-0→AH。该指令的执行对标志位无影响。【例】标志寄存器传送。执行前:(FLAGS)=0485H,(AX)=0FFFFH执行指令:LAHF执行后:AH=85H2.AH送标志指令SAHF语句格式:SAHF功能:将AH的内容送入标志寄存器的低8位,高8位不变。即(AH)→FLAGS7-0。从该指令功能可看出,SAHF为LAHF的逆过程。3.标志寄存器进出栈指令PUSHF/POPF语句格式:PUSHF
功能:将标志寄存器的内容压入堆栈。即(FLAGS)->堆栈。POPF功能:将堆栈顶端的内容送到标志寄存器。即堆栈->(FLAGS)。
地址传送指令1.传送偏移地址指令LEA2.传送偏移地址及数据段首址指令LDS3.传送偏移地址及附加数据段指令LES1.传送偏移地址指令LEA语句格式:LEAOPD,OPS;OPS的EA->OPD;OPD是16/32位的R,OPS是M功能:主存按源地址的寻址方式计算偏移地址,将偏移地址送入指定寄存器。【例】主存偏移地址的获取。MOVBX,0100H ;(BX)=0100HMOVSI,0210H ;(SI)=0210HLEABX,1234[BX+SI] ;(BX)=1544H2.LDS/LES/LFS/LGS/LSS指令语句格式:LDS/LES/LFS/LGS/LSSOPD,OPS;EA=OPS功能:地址传送LDS等指令中,OPD为R(16位),OPS为M(32位).操作对FLAGS无影响,执行后结果为:(EA)->R;全程指针的偏移地址(EA+2)->LDS/LES/LFS/LGS/LSS;全程指针的段地址输入输出指令1.输入指令IN2.输出指令OUT1.输入指令IN输入指令用来从指定的外设寄存器取信息送入累加器。它有四种形式:(1)语句格式:IN AL,PORT
功能:(PORT) →AL(2)语句格式:IN AX,PORT
功能:(PORT) →AX(3)语句格式:IN AL,DX
功能:([DX]) →AL(4)语句格式:IN AX,DX
功能:([DX]) →AL2.输出指令OUT输出指令用来把累加器的内容送往指定的外设存储器,它有四种形式:(1)语句格式:OUT PORT,AL
功能:(AL)
→PORT(2)语句格式:OUT PORT,AX
功能:(AX)
→PORT(3)语句格式:OUT DX,AL
功能:(AL)
→[DX](4)语句格式:OUT DX,AX
功能:(AX)
→[DX]算术运算类指令加法指令减运算指令乘运算指令除运算指令
加法指令1.加1指令
INC2.加指令ADD3.带进位加指令ADC1.加1指令INC语句格式:INCOPD功能:将目的操作数加1,结果送目的地址。即(OPD)+1→OPD。INC指令是一个单操作数指令,操作数可以是寄存器或存储器操作数。如:INCBX,即(BX)+1→BX。加1指令可用于对计数器和地址指针进行调整。2.加指令ADD语句格式:ADDOPD,OPS功能:将目的操作数与源操作数相加,结果存入目的地址中,源地址的内容不改变。即(OPD)+(OPS)→OPD。语句格式:ADCOPD,OPS功能:将目的操作数加源操作数再加低位进位,结果送目的地址。即(OPD)+(OPS)+CF→OPD。【例】无符号双字加法运算。MOV AX,4652H ;(AX)=4652HADD AX,0F0F0H ;(AX)=3742H,CF=1MOV DX,0234H ;(DX)=0234HADC DX,0F0F0H ;(DX)=0F325H,CF=03.带进位加指令ADC减运算指令1.减1指令DEC2.减指令SUB3.求补指令NEG4.带借位减指令
SBB5.比较指令
CMP1.减1指令DEC语句格式:DECOPD功能:将目的操作数减1,结果送目的地址。即(OPD)-1→OPD。DEC指令是一个单操作数指令,操作数可以是寄存器或存储器操作数。如:DECCX。即(CX)-1→CX。减1指令DEC也一般用于对计数器和地址指针的调整。语句格式:SUBOPD,OPS功能:目的操作数减源操作数,结果存于目的地址,源地址内容不变。即(OPD)-(OPS)→OPD【例】减法运算。MOV AX,5678H ;(AX)=5678HSUB AX,1234H ;(AX)=4444HMOV BX,3354H ;(BX)=3354HSUB BX,3340H ;(BX)=0014H2.减指令SUB语句格式:NEGOPD功能:将目的操作数的每一位求反(包括符号位)后加1,结果送目的地址。即(OPD)+1→OPD。【例】求补运算。MOV AX,0FF64HNEG AL ;(AX)=0FF9CHSUB AL,9DH ;(AX)=0FFFFHNEG AX ;(AX)=0001HDEC AL ;(AX)=0000HNEG AX ;(AX)=0000H3.求补指令NEG语句格式:SBBOPD,OPS功能:目的操作数减源操作数再减低位借位CF,结果送目的地址。即(OPD)―(OPS)―CF→OPD4.带借位减指令SBB5.比较指令CMP语句格式:CMPOPD,OPS功能:目的操作数减源操作数,结果只影响标志位,不送入目的地址。即(OPD)-(OPS)。【例】比较AL的内容数值大小。CMP AL,50 ;(AL)-50JB BELOW ;(AL)<50,转到BELOW处执行SUB AL,50 ;(AL)>=50,(AL)-50→ALINC AH ;(AH)+1→AHBELOW: …乘运算指令1.无符号数乘法指令MUL2.有符号乘指令IMUL1.无符号数乘法指令MUL语句格式:MULOPS功能:若是字节数据相乘,(AL)与OPS相乘得到字数据存入AX中;若是字数据相乘,则(AX)与OPS相乘得到双字数据,高字存入DX、低字存入AX中。即字节乘法:(AL)*(OPS)→AX,字乘法:(AX)*(OPS)→DX,AX【例】无符号数0A3H与11H相乘。MOV AL,0A3H ;(AL)=0A3HMOV BL,11H ;(BL)=11HMUL BL ;(AX)=0AD3H2.有符号乘指令IMUL语句格式:IMULOPS功能:字节乘法:(AL)*(OPS)→AX,字乘法:(AX)*(OPS)→DX、AX。IMUL指令除计算对象是带符号二进制数外,其他都与MUL一样,但计算结果不同。【例】有符号数0B4H与11H相乘。MOV AL,0B4H ;(AL)=B4HMOV BL,11H ;(BL)=11HIMUL BL ;(AX)=0FAF4H
除运算指令1.无符号除指令DIV2.有符号除指令IDIV1.无符号除指令DIV语句格式:DIVOPS功能:字节除法:(AX)/(OPS)→AL(商)、AH(余数)字除法:(DX、AX)/(OPS)→AX(商)、DX(余数)【例】写出实现无符号数0400H/0B4H运算的程序段。MOV AX,0400H ;(AX)=0400HMOV BL,0B4H ;(BL)=0B4HDIV BL ;商(AL)=05H,余数(AH)=7CH
语句格式:IDIVOPS功能:字节除法:(AX)/(OPS)→AL(商)、AH(余数)字除法:(DX,AX)/(OPS)→AX(商)、DX(余数)除法指令DIV和IDIV虽然对标志的影响未定义,但可产生溢出。【例】写出实现有符号数0400H/0B4H运算的程序段。MOV AX,0400H ;(AX)=0400HMOV BX,0B4H ;(BX)=0B4HIDIV BX ;(AL)=0F3H,(AH)=24H2.有符号除指令IDIV符号扩展指令
1.字节转换成字指令CBW2.将字转换成双字指令CWD1.字节转换成字指令CBW语句格式:CBW功能:将AL中的符号位数据扩展至AH。【例】将字节数据扩展成字数据。MOV AL,0A5H ;(AL)=0A5HCBW ;(AX)=0FFA5HADD AL,70H ;(AL)=25HCBW ;(AX)=0025H语句格式:CWD功能:将AX中的符号位数据扩展至DX。【例】将字数据扩展成双字数据。MOV DX,0 ;(DX)=0MOV AX,0FFABH ;(AX)=0FFABHCWD ;(DX)=0FFFFH(AX)=0FFABH2.将字转换成双字指令CWD
十进制调整指令1.压缩BCD码调整指令2.非压缩BCD码调整指令(1)加法的十进制调整指令DAA
语句格式:DAA功能:如果AL寄存器中低4位大于9或辅助进位(AF)=1,则(AL)=(AL)+6且(AF)=1;如果(AL)>=0A0H或(CF)=1,则(AL)=(AL)+60H且(CF)=1。同时,SF、ZF、PF均有影响。【例】压缩BCD码的加法运算。MOVAL,68H ;(AL)=68H,表示压缩BCD码68MOVBL,28H ;(BL)=28H,表示压缩BCD码28ADDAL,BL ;二进制加法:(AL)=68H+28H=90HDAA ;十进制调整:(AL)=96H
;实现压缩BCD码加法:68+28=96(2)减法的十进制调整指令DAS语句格式:DAS功能:如果(AF)=1或AL寄存器中低4位大于9,则(AL)=(AL)-6且(AF)=1;如果(AL)>=0A0H或(CF)=1,则(AL)=(AL)-60H且(CF)=1。同时SF、ZF、PF均受影响。【例】压缩BCD码的减法运算。MOV AL,68H;(AL)=68H,表示压缩BCD码68MOV BL,28H;(BL)=28H,表示压缩BCD码28SUB AL,BL ;二进制减法:(AL)=68H-28H=40HDAS ;十进制调整:(AL)=40H
;实现压缩BCD码减法:68-28=402.非压缩BCD码调整指令(1)加法的非压缩BCD码调整指令AAA(2)减法的非压缩BCD码调整指令AAS(3)乘法的非压缩BCD码调整指令AAM(4)除法的非压缩BCD码调整指令AAD语句格式:AAA功能:如果AL的低4位大于9或(AF)=1,则:(AL)=(AL)+6(AH)=(AH)+1(CF)=(CF)=1且AL高4位清零。否则:(CF)=(AF)=0AL高4位清零。(1)加法的非压缩BCD码调整指令AAA语句格式:AAS功能:如果AL的低4位大于9或(AF)=1,则:(AL)=(AL)-6(AH)=(AH)-1(AF)=(CF)=1AL高4位清零。否则:(CF)=(AF)=0
AL高4位清零。其他标志位OF、PF、SF、ZF不确定。(2)减法的非压缩BCD码调整指令AAS语句格式:AAM功能:被调整的乘积在AX中,对AL按10取模,则:(AL)/0AH→AH(商):AL(余数)其中AH为商,AL为余数,标志位AF、CF、OF、PF、SF、ZF受影响。(3)乘法的非压缩BCD码调整指令AAM语句格式:AAD功能:除法运算前,先调整被除数AX内容,使:(AL)=(AL)+(AH)*0AH
(AH)=0即把非压缩型十进制数变成二进制数。(4)除法的非压缩BCD码调整指令AAD逻辑运算和位操作类指令逻辑运算指令1.求反指令NOT2.逻辑乘指令AND3.测试指令TEST4.逻辑加指令OR5.按位加指令XOR语句格式:NOTOPD功能:将目的地址中的内容逐位取反后送入目的地址。即(OPD)求反→OPD【例】逻辑非运算。MOV AX,878AH;(AX)=878AHNOT AX ;(AX)=7875H1.求反指令NOT语句格式:ANDOPD,OPS 功能:将目的操作数和源操作数进行逻辑乘运算,结果存目的地址。即(OPD)∧(OPS)→OPD。该指令用于清除目的操作数中与源操作数置0的对应位。说明:逻辑乘的运算法则为:1∧1=1,1∧0=0,0∧1=0,0∧0=0【例】将AL中第3位和第7位清零。MOV AL,0FFHAND AL,77H2.逻辑乘指令AND语句格式:TESTOPD,OPS功能:源地址和目的地址的内容执行按位的逻辑乘运算,结果不送入目的地址。即(OPD)∧(OPS)。【例】测试AX中的第12位是否为0,不为0则转L。TEST AX,1000HJNE L
3.测试指令TEST语句格式:OROPD,OPS功能:将目的操作数和源操作数进行逻辑加运算,结果存目的地址。即(OPD)∨(OPS)→OPD。说明:逻辑加的运算法则为:1∨1=1,1∨0=1,0∨1=1,0∨0=0。【例】将AL寄存器中第3位和第7位置1。MOV AL,0OR AL,88H
4.逻辑加指令OR语句格式:XOROPD,OPS功能:目的操作数与源操作数做按位加运算,结果送入目的地址。即(OPD)⊕(OPS)→OPD。说明:按位加的运算法则为;1⊕1=0,1⊕0=1,0⊕1=1,0⊕0=0。【例】按位加运算。MOV AL,45H ;(AL)=45HXOR AL,31H ;(AL)=74H5.按位加指令XOR移位指令
移位指令包括算术移位指令、逻辑移位指令和循环移位指令,分别进行左移和右移操作。这些指令均有统一的语句格式:SAL/SHLOPD,OPS;左移SAROPD,OPS;算术右移SHROPD,OPS;逻辑右移其中,OPD是8/16/32位的R/M;OPS是计数值(即移位次数),有三种情形:OPS即可是8位的立即数或CL的内容(移位前次数->CL)。其功能为将目的操作数的所有位按操作符规定的方式移动1位或按寄存器CL规定的次数(0~255)移动,结果送入目的地址。目的操作数是8位(或16位)的寄存器数据或存储器数据。语句格式:SALOPD,1或SHLOPD,1SALOPD,CL或SHLOPD,CL功能:将(OPD)向左移动CL指定的次数,最低位补入相应的0,CF的内容为最后移入位的值。1.算术左移和逻辑左移指令SAL(SHL)语句格式:SAROPD,1或SAROPD,CLCF功能:将(OPD)向右移动CL指定的次数且最高位保持不变;CF的内容为最后移入位的值。2.算术右移指令SARMOV BH,0F4H ;(BH)=0F4HMOV CL,2 ;(CL)=2SAR BH,CL ;(BH)=0FDH,(CF)=0该例语句“SAR
BH,CL”实际上完成了(BH)/4→BH的运算,所以,用SAR指令可以实现对有符号数除2n的运算(n为移位次数)。【例】算术右移运算语句格式:SHROPD,1或SHROPD,CL功能:将(OPD)向右移动CL规定的次数,最高位补入相应个数的0,CF的内容为最后移入位的值。3.逻辑右移指令SHR语句格式:ROLOPD,1或ROLLPD,CL功能:将目的操作数的最高位与最低位连成一个环,将环中的所有位一起向左移动CL规定的次数。CF的内容为最后移入位的值。4.循环左移指令ROL语句格式:ROROPD,1或ROROPD,CL功能:将目的操作数的最高位与最低位连成一个环,将环中的所有位一起向右移动CL规定的次数,CF的内容为最后移入位的值。5.循环右移指令ROR语句格式:RCLOPD,1或RCLOPD,CL功能:将目的操作数连同CF标志一起向左循环移动CL规定的次数。6.带进位的循环左移指令RCL语句格式:RCROPD,1或RCROD,CL功能:将目的操作数连同CF标志一起向右循环移动所规定的次数。7.带进位的循环右移指令RCR串操作类指令串操作指令:数据传送类指令每次只能传送一个数据,若要传送大批数据就需要重复编程,这样就浪费了大量的时间和空间。为此8086提供了一组处理主存中连续存放数据串的指令,这就是串操作指令。
下图流程图总结了串操作的过程
串操作流程图语句格式:①MOVSB——字节串传送②MOVSW——字串传送功能:将以SI为指针的源串中的一个字节(或字)存储单元中的数据传送至以DI为指针的目的地址中去,并自动修改指针,使之指向下一个字节(或字)存储单元。即:①(DS:[SI])→ES:[DI]。
②
当DF=0时,(SI)和(DI)增量。当DF=1时,(SI)和(DI)减量。1.传送指令MOVS语句格式:①CMPSB——字节串比较②CMPSW——字串比较功能:将SI所指的源串中的一个字节(或字)存储单元中的数据与DI所指的目的串中的一个字节(或字)存储单元中的数据相减,并根据相减的结果设置标志,但结果并不保存。即:①([SI])-([DI])。②修改串指针,使之指向串中的下一个元素。当DF=0时,(SI)和(DI)增量。当DF=1时,(SI)和(DI)减量。2.串比较指令CMPS
语句格式:①SCASB——字节串搜索②SCASW——字串搜索功能:AL(字节)或AX(字)中的内容与DI所指的目的串中的一个字节(或字)存储单元中的数据相减,根据相减结果设置标志位,结果不保存,即:①字节操作:(AL)-([DI]),字操作:(AX)-([DI])。②修改指针使之指向串中的下一个元素。当DF=0时,(DI)增量。当DF=1时,(DI)减量。3.串搜索指令SCAS语句格式:①LODSB——从字节串中取数②LODSW——从字串中取数功能:将SI所指的源串中的一个字节(或字)存储单元中的数据取出来送入AL(或AX)中。即:①字节操作:([SI])→AL,字操作:([SI])→AX。②修改指针SI,使它指向串中的下一个元素。当DF=0时,(SI)增量。当DF=1时,(SI)减量。4.从源串中取数指令LODS语句格式:①STOSB——往字节串中存数②(2)STOSW——往字串中存数功能:将AL或AX中的数据送入DI所指的目的串中的字节(或字)存储单元中。即:①字节操作:(AL)→[DI],字操作:(AX)→[DI]。②修改指针DI,使之指向串中的下一个元素。当DF=0时,(DI)增量)。当DF=1时,(DI)减量。5.往目的串中存数指令STOS(1)REPREP前缀用在MOVS、STOS、LODS指令前。功能:每执行一次串指令(CX)-1,直到(CX)=0,重复执行结束。(2)REPZ该指令一般用在CMP、SCAS指令前。功能:每执行一次串指令(CX)-1,并判断ZF标志是否为0,只要(CX)=0或ZF=0,则重复执行结束。(3)REPNZ该指令一般用在CMPS、SCAS指令前。功能:每执行一次串指令(CX)-1,并判断ZF标志是否为0,只要(CX)=0或ZF=1,则重复执行结束。6.重复前缀指令REPREPZREPNZ控制转移类指令条件转移指令无条件转移指令循环指令子程序调用指令中断指令条件转移指令1.简单条件转移指令2.无符号数条件转移指令3.有符号数条件转移指令语句格式:操作符短标号功能:如果条件满足,则(IP)+位移量→IP。1.简单条件转移指令2.无符号数条件转移指令【例】比较无符号数大小,将较大的数存放AX寄存器CMP AX,BX;(AX)-(BX)JNB NEXT ;若AX>=BX,转移到NEXTXCHG AX,BX;若AX<BX,交换NEXT:…有符号数条件转移指令有符号数条件转移指令示例【例】比较有符号数大小,将较大的数存放在AX寄存器CMP AX,BX ;(AX)-(BX)JNL NEXT ;若AX>=BX,转移到NEXTXCHG AX,BX ;若AX<BX,交换NEXT:…无条件转移指令无条件转移指令的语句格式及功能循环指令
1.循环指令LOOP2.相等/为零循环指令LOOPE3.不相等/不为零循环指令LOOPNE4.CX为零转移指令JCXZ1.循环指令LOOP语句格式:LOOP短标号功能:(CX)-1≠0,则程序转移(循环);否则,顺序执行。说明:使用LOOP指令可代替两条指令:DECCXJNE短标号2.相等/为零循环指令LOOPE语句格式:①LOOPE短标号②LOOPZ短标号功能:(CX)-1≠0且ZF=1,则程序转移(循环);否则,顺序执行。3.不相等/不为零循环指令LOOPNE语句格式:①LOOPNE短标号②LOOPNZ短标号功能:(CX)-1≠0,则程序转移(循环);否则,顺序执行。4.CX为零转移指令JCXZ语句格式:JCXZ短标号功能:(CX)-1≠0,则程序转移(循环);否则,顺序执行。子程序调用指令1.子程序调用指令CALL(1)段内直接调用(2)段间直接调用(3)段内间接调用(4)段间间接调用2.返回指令RET(1)语句格式:RET(2)语句格式:RETn(n为偶数)
中断指令1.中断调用指令INT语句格式:INTn功能:①(FLAGS)→↓(SP),0→IF、TF。②(CS)→↓(SP),(4*n+2)→CS。③(IP)→↓(SP),(4*n)→IP。2.中断返回指令IRET语句格式:IRET功能:①↑(SP)→IP②↑(SP)
→CS③↑(SP)
→
FLAGS处理机控制类指令标志位设置指令CPU状态控制指令标志位设置指令CLC设置标志CF=0,STC设置标志CF=1,CLD设置标志DF=0,STD设置标志DF=1,CLI设置标志IF=0,STI设置标志IF=1.CPU状态控制指令1.空操作指令NOP2.总线封锁前缀指令LOCK3.暂停指令HLT4.交权指令ESC5.等待指令WAIT字符设备I/O功能调用
本节主要介绍DOS子程序调用方式、键盘输入、屏幕显示和打印机输出的DOS系统功能调用。DOS子程序调用方式调用之前:设置子程序的入口参数。调用请求:执行“INT21H”软中断指令调用。调用之后:可能有出口参数,也可能无出口参数。如果有出口参数,可根据程序需要,判断本次调用是否成功或者分析执行情况。1从键盘输入一个字符AH=01H
从键盘读入一个字符,送到显示器输出,并将该字符的ASCII码值->AL(出口参数);如果检测到读入的字符是Ctrl+Break,则中止程序执行。例:MOVAH,01H键盘输入子程序,功能1->AHINT21HDOS子程序调用,等待键入一个字符调用后,输入字符的ASCII码值->AL2、显示输出一个字符AH=02H将DL寄存器的字符(ASCII码值)送到标准输出设备上输出。若检测到Ctrl+Break间,则执行中断“INT23H”中止程序的执行。例:MOVDL,AL;AL内容是字符的ASCII码->DLMOVAH,2;功能号2->AHINT21H;调用显示一个字符3.打印机输出一个字符AH=05H将要打印的字符->DL,然后调用就可以打印输出。如果有标准打印设备不输出,可在执行时用DOS命令键Ctrl+Break进行帮助。例:MOVDL,AL;AL的字符ASCII码->DLMOVAH,5;功能号5->AHINT21H;调用打印一个字符4、直接控制台输入AH=07H输入时不回显,例如,从键盘输入一个字符,在屏幕上不显示,出口参数AL=键入的字符。可用来设置保密口令。例:
PASSWORDDB10DUP(0)...MOVCX,6MOVSI,0AGAIN:MOVAH,7INT21HMOVPASSWORD[SI],ALINCSILOOPAGAIN5、显示输出字符串AH=09H例:执行下语句后屏幕显示输出“WELCOME!”STRINGDB‘WELCOME!’,13,10,’$’
…MOVAX,SEGSTRINGMOVDS,AXLEADX,STRINGMOVAH,9INT21H6、缓冲区键盘输入AH=0AH如果需要键入最大的字符数位N,则由“DS:DX”指向的缓冲区可分为3个字段。第一个字段:定义缓冲区可存放的字符数N+1,使机器自动控制检查,若键入实际的字符数个数超过N,则响铃报警。第二个字段:定义缓冲区,当键盘输入调用退出后,系统自动计数并存放实际输入的字符。第三个字段:定义可存放字符的缓冲区,调用退出
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年工业用呢行业深度研究分析报告
- 编程电缆行业深度研究报告
- 中国06新款货运电动车项目投资可行性研究报告
- 比虫啉行业深度研究报告
- 中国防雷盒项目投资可行性研究报告
- 大号可调沙发脚行业深度研究报告
- 对夹式电磁流量计行业深度研究报告
- 中国平台阅读器项目投资可行性研究报告
- 粉陶瓷原料行业深度研究报告
- 灯饰五金行业深度研究报告
- 店铺探店合作协议书范本
- 沪科版(2024)八年级全一册物理第一学期期中学业质量测试卷(含答案)
- JT-T-1199.1-2018绿色交通设施评估技术要求第1部分:绿色公路
- DZ∕T 0389-2021 地质钻探孔内事故预防与处理技术规程(正式版)
- 公司期货交易及风险控制管理制度
- 基于python的汽车零配件管理系统的设计与实现
- 诊断学-发热课件
- 大学生职业规划大赛成长赛道 (二)
- 无印良品的管理手册
- 无人机的使用安全课件
- 《环境规划与管理》教学课件-07生态规划
评论
0/150
提交评论