




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1 概述n汇编语言基本概念n程序汇编连接与调试方法1 汇编语言基本概念一、汇编语言相关特征l机器语言 是一种用二进制代码编写指令和程序的语言 例: b0 04 传送指令,将4送到累加器al中l汇编语言 用助记符代替指令的操作码,用数字或符号代替指令中操作数或操作数存放位置的一种程序设计语言 例: mov al , 04 ;传送指令,将4送到累加器al中 mov eax , 200209281 汇编语言基本概念二、汇编语句行基础知识基本格式 名字 操作符 操作数 ;注释操作符: 机器指令、伪指令、宏指令的助记符操作数:操作数项有多个操作数时,用逗号 ,分开1 汇编语言基本概念三、汇编语言源程序示
2、例1、程序的层次模块结构源程序堆栈段数据段代码段debug直接编程初始化输 入运算处理转 换输 出返回dos数值运算非数值运算1 汇编语言基本概念n汇编语言与机器特性密切相关汇编语言硬件特性cpu工作方式cpu寄存器体系指令系统存储管理机制中断与外部设备依赖于充分发挥1 汇编语言基本概念2、源程序的分段结构及示例说明例:程序输出显示:“ welcome !”,流程描述如下:定义堆栈段定义数据段定义代码段源程序模块结束指示段寄存器初始化显示输出字符串自动返回 dos 源程序sample.asm: stacks segment stack dw 128 dup(?) stacks ends dat
3、as segment string db welcome!,13h,10h,$ datas ends codes segment assume cs:code,ds:datas start: mov ax , datas mov ds, ax lea dx , string mov ah , 09h int 21h mov ax , 4c00h int 21h codes ends end start堆栈段数据段代码段源程序模块结束2 程序汇编连接与调试方法设计、编写源程序(数据结构+算法+编码)汇编语言源程序文件(*.asm)目标代码程序文件(*.obj)可执行程序文件(*.exe/*.co
4、m)运行正确?调试运行正确?结束否否否是是调试debug编辑edit连接link执 行汇编masm2 程序汇编连接与调试方法一、程序编辑 利用熟悉的文本编辑软件,对汇编语言源程序进行编辑,生成 .asm文件。 汇编语言使用过程中,生成不同文件后缀名的含义: .asm 汇编源程序 .obj 目标文件 .lst 列表文件 .crf 交叉引用文件 .map 分配图文件 .lib 库文件 .def 定义文件 .exe / .com 可执行文件2 程序汇编连接与调试方法二、程序汇编与连接执行n汇编程序 masm.exe masm / ? 查看命令参数n连接程序 link.exe link / ? 查看命
5、令参数n汇编连接程序 ml.exe ml / ? 查看命令参数n汇编过程:对源程序扫描后生成目标文件 .obj 如有语法错误,则显示相应的错误信息,返回修改源程序2 程序汇编连接与调试方法n汇编示例: d:masm6 masm p1.asm 显示如下: assembling:p1.asm p1.asm(12):error a2006:undefined symbol:five1 表示:源程序12行有错,未定义符号 five1 源程序一直到修改后汇编无错误,则生成 p1.objn连接: d:masm6 link p1n生成执行文件 p1.exe 则可直接运行: d:masm6 p1 2 程序汇编
6、连接与调试方法三、程序跟踪调试n汇编过程中可以检查程序的语法错误n汇编无误,生成可执行文件后,运行没有达到预期的结果,程序可能存在逻辑错误。需要用调试工具进行跟踪调试,查找程序的逻辑错误。n常用调试工具程序: debug.exe 提供一个监控程序环境,通过提供命令和相关参数了解程序执行过程中各寄存器和存储单元的值及其变化情况,帮助确定程序中的问题。(全部命令的详细格式参见教材附录)2 指令系统n指令格式n指令寻址方式n指令集2.1指令的基本格式 nintel 32位处理器指令格式。指令长度不能超过15个字节。 前缀 操作码 寻址方式 位移量 立即数 03b 12b 02b 04b 04b 16
7、位寻址方式n立即寻址n寄存器寻址n直接寻址n寄存器间接寻址n寄存器相对寻址n基址变址寻址n相对基址变址寻址2.2 寻址方式n 32位的指令寻址包括数据寻址和程序转移寻址。现介绍如下:1、非存储器的数据寻址方式示例n(1)立即寻址n mov eax,19461201h; 19461201h-eax 与16位寻址相似。 (2) 寄存器寻址nmov eax,ecx ;ecx-eax 与16位寻址相似2、 存储器的数据寻址方式示例n(1)直接寻址nmov eax,4612h ;ea=4612,(ea)-eax 与16位寻址相似。n(2)寄存器间接寻址nmov ecx,edx ;ecx间接指示存放操作数
8、ea在ecx 中,ea=ecx,edx-ea,与16位寻址相似。存储器的数据寻址方式示例(续)n(3)寄存器相对寻址nmov ecx,eax+24 ; ea=eax,(ea)-ecxn(4)基址变址寻址nmov eax ,ebx esi ; ea=ebx+esi,(ea)-eaxn(5)相对基址变址寻址nsub eax,ebx+esi+0ff0h ;ea=ebx+esi+0ff0h,eax-(ea)-eax存储器的数据寻址方式示例(续)(6)带比例因子的变址nmov ecx,esi*4 ;ea=esi4,(ea)-ecx(7)基址与带比例因子的变址寻址nmov ecx,eaxedx*8 ;ea
9、=eax+edx8,(ea)-ecx(8)基址与带位移量及比例因子的变址寻址nmov eax,ltabedi*4ebp+80 ;ea=ltab+edi4+ebp+80,(ea)-eax3.程序转移寻址方式n有相对eip的段内直接寻址,段内间接寻址、段间直接寻址和段间间接寻址。n段内转移是指程序在同一段代码内,仅改变eip的值而不改变cs的值所发生的转移。n而段间转移是程序要从一个代码段转移到另一个代码段,则不仅改变eip的值,同时也要改变cs的值。n无论是段内还是段间发生的转移都有直接和间接的形式,因此程序转移有四种寻址。n1.段内直接寻址(intrasegment direct addres
10、sing) 转移偏移地址ea是指令中位移量(与指令指针ip当前内容之和。即: ea = ip + disp - ipn2.段内间接寻址(intrasegment indirect addressing) 转移偏移地址 ea 如果指定的是寄存器,则将寄存器的内容-ip。 如果指定的是存储器中的一个字,则将该存储单元的内容-ip。段内转移过程段内转移图示n段内直接转移和间接转移寻址如下图:段间转移过程n1.段间直接寻址(intersegment direct addressing)n 用指令中直接提供的转移偏移地址ea-ip,指令同时直接提供的转移段地址-cs, 实现从一个代码段转移到另一个代码段
11、。n2.段间间接寻址(intersegment indirect addressing)n 根据存储器的数据寻址方式获得ea,再将ea双字单元第一个字的内容作为转移偏移地址-ip,ea双字单元第二个字的内容作为转移段地址-cs,然后cs+ip形成指令的实际转移地址。段间转移图示n程序段间的直接或间接转移如下图:4.前缀代码67h或66hn32位机汇编指令或有32位操作数的情形识别涉及指令机器码格式的有关前缀表示。这些在相应的汇编列表文件(*.lst)或debug过程中可以看到,如前缀代码67h或66h。(1)机器指令操作数长度属性前缀码66hn66|83 e0 0f and eax,0fh ;
12、eax0fh-eax 66|8b cb mov ecx,eax(2)机器指令寻址长度续性前缀n67|8b 1475 00000026 mov dx,26hesi*2n67|66|8b 04b0 mov eax,eax+esi*43.3 指令系统n指令系统是一台机器所有指令的集合。 pentium系列机指令系统庞大、类型多样,约有300多条指令,其中包括基本指令100多条。 具有支持多进程、多任务、虚拟存储器和多媒体等功能的32位指令。常用指令类型集n1.数据传送类指令n2.算术运算类指令n3.逻辑和移位操作类指令n4.串操作与重复前缀类指令n5.控制转移类指令n6.处理机控制类指令n7.其它指
13、令本讲义约定:nopd表示目的操作数; ops表示源操作数; (ops)表示ops的内容; (opd)表示opd的内容; -表示传送; r表示通用寄存器; sr表示段寄存器; m表示主存储器; nxxxx:xxxx 表示组合号, “:”表示其前后组成一个数; l表示操作数的长度; d表示立即数; b/w/d表示字节或字或双字。数据传送类指令n通用数据传送指令n堆栈操作指令n标志寄存器传送指令n地址传送指令n输入输出指令通用数据传送指令n1.传送指令movn2.数据交换指令xchgn3.查表转换指令 xlat语句格式:mov opd,opsn功能:将源操作数传送入目的地址,源地址内容不变。即(o
14、ps)opd。n下图描述了mov指令在传送数据时允许传送的路径及类型。1.传送指令mov注意:n(1) opd,ops的类型(8/16/32位)必须一致.n(2) opd不能使用立即数。n(3) 双操作数不能同时为内存中的数据。n(4) 段寄存器不能直接送立即数.n(5) 指令执行后不影响flags的标志位的状态.n(6) 不能任意改变cs示例:存储器与寄存器间数据传送。nmov ax,buf ;buf是变量,源操作数为直接寻址nmov bh,di ;源操作数为寄存器间接寻址nmov di,es:3si ;源操作数为变址寻址,使用跨段前缀nmov bp,3bx+si ;源操作数为基址加变址寻址
15、nmov bufa,dl ;bufa是一字节变量nmov bp,ax ;使用ss段寄存器nmov ds:bp,dl ;使用跨段前缀nmov buf,ds ;buf是个字变量nmov es ,buf2.数据交换指令xchgn语句格式:xchg opd,opsn功能:将源地址与目的地址中的内容互换。 即(opd)ops,(ops)opd。n寄存器与存储器之间数据交换。nmov ax,5678h;(ax)=5678hnmov bx,0ffffh ;(bx)=0ffffhnxchg ax,bx;(ax)=0fffh, (bx)=5678hmovsx和movzx指令n格式:movsx opd, ops
16、movzx opd, opsn它们将ops的内容-opd,但是对于opd左边空缺的位,movsx全部用ops的符号填充(作符号延伸), 可以对有符号的数进行符号扩展;而movzx是全部以零(0)填充,可对无符号数进行0扩展. 注意:opd的位数比ops的位数长示例:nmov cl, 88h movzx ax, cl ;ax = 0088h movsx bx, cl ;bx = ff88hn另外也可如下书写指令:nmovsx cx, bl movsx eax, bufnmovzx ax, cl movsx ebx, alnmovzx esi, buf movzx edx,di3.查表转换指令 x
17、lan语句格式:xlat ops或xlatn功能:将(bx)为首址(al)为位移量的字节存储单元中的数据送al寄存器。即(bx+al)al。堆栈操作指令n1.进栈指令pushn2.出栈指令popn3.pusha/pushad指令n4.popa/popad指令1进栈指令pushn语句格式: push ops ; w/d, r/sr/m/dn功能:将寄存器、段寄存器、立即数或存储器中的一个字数据压入堆栈顶部,指令视操作数长度为字(2字节)或双字(4字节)和地址为16位/32位,先将sp/esp - 2/4-sp/esp,后将ops-sp/esp。2出栈指令popn语句格式:语句格式: pop op
18、d ; w/d, r/sr/m/dpop opd ; w/d, r/sr/m/dn功能:功能: 视视opdopd长度为字或双字长度为字或双字, ,先将当前先将当前sp/espsp/esp指向指向的内容的内容-opd,-opd,后将后将sp/esp+2/4-sp/esp sp/esp+2/4-sp/esp 。n从从poppop指令功能可看出,该指令为指令功能可看出,该指令为pushpush指令的逆过程指令的逆过程, ,一般成对使用。一般成对使用。3.pusha/pushad指令n格式: pusha ; 压入8个字通用寄存器. pushad ; 压入8个双字通用寄存器. 4.popa/popad指
19、令n格式: popa ;弹出到8个16位通用寄存器 popad ; 弹出到8个32位通用寄存器标志寄存器传送指令n1.标志送ah指令lahfn2.ah送标志指令sahfn3.标志寄存器进栈指令pushfn4.标志寄存器出栈指令popf1标志送ah指令lahfn语句格式:lahfn功能:将标志寄存器的低8位送入ah寄存器。即(flags)7-0ah。该指令的执行对标志位无影响。n【例】标志寄存器传送。执行前:(flags)=0485h,(ax)=0ffffh执行指令:lahf执行后 : ah =85h2ah送标志指令sahfn语句格式:sahfn功能:将ah的内容送入标志寄存器的低8位,高8位不
20、变。即(ah)flags7-0。n从该指令功能可看出,sahf为lahf的逆过程。 3标志寄存器进出栈指令pushf/popfn语句格式:npushf 功能:将标志寄存器的内容压入堆栈。即(flags)- 堆栈。 npopfn功能:将堆栈顶端的内容送到标志寄存器。即堆栈- (flags )。 地址传送指令n1 1传送偏移地址指令传送偏移地址指令 lealean2 2传送偏移地址及数据段首址指令传送偏移地址及数据段首址指令ldsldsn3 3传送偏移地址及附加数据段指令传送偏移地址及附加数据段指令lesles1传送偏移地址指令 lean语句格式: lea opd,ops ;ops的ea-opd
21、;opd是16/32位的r,ops是mn功能:主存按源地址的寻址方式计算偏移地址,将偏移地址送入指定寄存器。n【例】主存偏移地址的获取。mov bx,0100h ;(bx)=0100hmov si, 0210h;(si) =0210hlea bx,1234bx+si ; (bx)=1544h2lds/les/lfs/lgs/lss指令n语句格式:lds/les/lfs/lgs/lss opd,ops ;ea = opsn功能: 地址传送lds等指令中,opd为r(16位),ops为m(32位).操作对flags无影响,执行后结果为:(ea)-r ;全程指针的偏移地址(ea+2)- lds/le
22、s/lfs/lgs/lss ;全程指针的段地址输入输出指令n1输入指令inn2输出指令out1输入指令inn输入指令用来从指定的外设寄存器取信息送入累加器。它有四种形式:n(1)语句格式:inal,port 功能:(port) aln(2)语句格式:inax,port 功能:(port) axn(3)语句格式:inal,dx 功能:(dx) aln(4)语句格式:inax,dx 功能:(dx) al2输出指令outn输出指令用来把累加器的内容送往指定的外设存储输出指令用来把累加器的内容送往指定的外设存储器,它有四种形式:器,它有四种形式:n(1)语句格式:)语句格式:outport,al 功能
23、:(功能:(al)portn(2)语句格式:)语句格式:outport,ax 功能:(功能:(ax)portn(3)语句格式:)语句格式:outdx,al 功能:(功能:(al)dxn(4)语句格式:)语句格式:outdx,ax 功能:(功能:(ax)dx算术运算类指令n加法指令n减运算指令n乘运算指令n除运算指令 加法指令n1加1指令 incn2加指令addn3带进位加指令adcn1加1指令 incn语句格式:inc opdn功能:将目的操作数加1,结果送目的地址。即(opd)+1opd。ninc指令是一个单操作数指令,操作数可以是寄存器或存储器操作数。如:inc bx,即(bx)+1bx。
24、加1指令可用于对计数器和地址指针进行调整。 2加指令addn语句格式:add opd, opsn功能:将目的操作数与源操作数相加,结果存入目的地址中,源地址的内容不改变。n即(opd)+(ops)opd。n语句格式:adc opd,opsn功能:将目的操作数加源操作数再加低位进位,结果送目的地址。n即(opd)+(ops)+cf opd。n【例】无符号双字加法运算。movax,4652h ;(ax)=4652haddax,0f0f0h;(ax)=3742h,cf=1movdx,0234h ;(dx)=0234hadcdx,0f0f0h;(dx)=0f325h,cf=03带进位加指令adc减运算
25、指令n1减1指令decn2减指令subn3求补指令negn4带借位减指令 sbbn5比较指令 cmp1减1指令decn语句格式:dec opd n功能:将目的操作数减1,结果送目的地址。即(opd)1opd。ndec指令是一个单操作数指令,操作数可以是寄存器或存储器操作数。n如:dec cx。即(cx)1cx。n减1指令dec也一般用于对计数器和地址指针的调整。n语句格式:语句格式:sub opdsub opd,opsopsn功能:目的操作数减源操作数,结果存于目的地址,功能:目的操作数减源操作数,结果存于目的地址,源地址内容不变。源地址内容不变。n即(即(opdopd)()(opsops)o
26、pdopdn【例】【例】减法运算。减法运算。nmovmovax ax ,5678h5678h;(;(axax)=5678h=5678hsubsubax ax ,1234h1234h;(;(axax)=4444h=4444hnmovmovbx bx ,3354h3354h;(;(bxbx)=3354h=3354hsubsubbx bx ,3340h3340h;(;(bxbx)=0014h=0014h2减指令subn语句格式:语句格式:neg opdneg opdn功能:将目的操作数的每一位求反(包括符号位)功能:将目的操作数的每一位求反(包括符号位)后加后加1 1,结果送目的地址。,结果送目的地
27、址。n即(即(opdopd)+1opd+1opd。n【例】【例】求补运算。求补运算。movmovaxax,0ff64h0ff64hnegnegalal;(;(axax)=0ff9ch=0ff9chsubsubalal,9dh9dh;(;(axax)=0ffffh=0ffffhnegnegaxax;(;(axax)=0001h=0001hdecdecalal;(;(axax)=0000h=0000hnegnegaxax;(;(axax)=0000h=0000h3求补指令negn语句格式:sbb opd ,opsn功能:目的操作数减源操作数再减低位借位cf,结果送目的地址。n即(opd)(ops)
28、cf opd4带借位减指令 sbb5比较指令 cmpn语句格式:语句格式:cmp opdcmp opd,opsopsn功能:目的操作数减源操作数,结果只影响标志位,功能:目的操作数减源操作数,结果只影响标志位,不送入目的地址。不送入目的地址。n即(即(opdopd)()(opsops)。)。n【例】比较【例】比较alal的内容数值大小。的内容数值大小。ncmpcmpalal,5050;(;(alal)5050njbjbbelowbelow ;(;(alal)50=50=50,(,( alal)50al50alnincincahah;(;(ahah)+1ah+1ahnbelowbelow:乘运算
29、指令n1无符号数乘法指令muln2有符号乘指令imul1无符号数乘法指令muln语句格式: mul opsn功能: 若是字节数据相乘,(al)与ops相乘得到字数据存入ax中;若是字数据相乘,则(ax)与ops相乘得到双字数据,高字存入dx、低字存入ax中。n即字节乘法:(al)* (ops) ax,字乘法:(ax) * (ops) dx,ax n【例】无符号数0a3h与11h相乘。nmoval,0a3h;(al)=0a3hnmovbl, 11h;(bl)=11hnmulbl ;(ax)=0ad3h2有符号乘指令imuln语句格式:imul opsn功能:字节乘法:(al)*(ops)ax,字
30、乘法:(ax)*(ops)dx、ax。nimul指令除计算对象是带符号二进制数外,其他都与mul一样,但计算结果不同。 n【例】有符号数0b4h与11h相乘。nmov al,0b4h;(al)=b4hnmov bl,11h;(bl)=11hnimulbl ;(ax)=0faf4h 除运算指令n1无符号除指令divn2有符号除指令idiv1无符号除指令divn语句格式:div opsn功能:字节除法:(ax)/(ops) al(商)、ah(余数)字除法:(dx、ax)/(ops) ax(商)、dx(余数)n【例】写出实现无符号数0400h / 0b4h运算的程序段。movax,0400h;(ax
31、)=0400hmovbl,0b4h;(bl)=0b4hdivbl ;商(al)=05h,余数(ah)=7ch n语句格式:idiv opsn功能:字节除法:(ax)/(ops) al(商)、ah(余数)字除法:(dx,ax)/(ops) ax (商)、dx(余数)除法指令div和idiv虽然对标志的影响未定义,但可产生溢出。n【例】写出实现有符号数0400h /0b4h运算的程序段。movax,0400h;(ax)=0400hmovbx,0b4h;(bx)=0b4hidivbx ;(al)=0f3h,(ah)=24h2有符号除指令idiv符号扩展指令 n1字节转换成字指令cbwn2将字转换成双
32、字指令cwd1字节转换成字指令cbw语句格式:cbwn功能:将al中的符号位数据扩展至ah。n【例】将字节数据扩展成字数据。moval,0a5h;(al)=0a5hcbw ;(ax)=0ffa5haddal,70h;(al)=25hcbw ;(ax)=0025hn语句格式:cwdn功能:将ax中的符号位数据扩展至dx 。n【例】将字数据扩展成双字数据。movdx, 0;(dx)=0movax, 0ffabh;(ax)=0ffabhcwd;(dx)=0ffffh (ax)=0ffabh2将字转换成双字指令cwd 十进制调整指令n1压缩bcd码调整指令n2非压缩bcd码调整指令(1)加法的十进制调
33、整指令daa n语句格式:语句格式:daadaan功能:如果功能:如果alal寄存器中低寄存器中低4 4位大于位大于9 9或辅助进位(或辅助进位(afaf)=1=1,则(,则(alal)= =(alal)+6+6且(且(afaf)=1=1;如果(;如果(alal)=0a0h=0a0h或(或(cfcf)=1=1,则(,则(alal)= =(alal)+60h+60h且(且(cfcf)=1=1。同时,同时,sfsf、zfzf、pfpf均有影响。均有影响。n【例】压缩【例】压缩bcdbcd码的加法运算。码的加法运算。mov almov al,68h68h ;(alal)=68h=68h,表示压缩,表
34、示压缩bcdbcd码码6868mov blmov bl,28h28h ;(blbl)=28h=28h,表示压缩,表示压缩bcdbcd码码2828add aladd al,blbl;二进制加法:;二进制加法:(alal)=68h+28h=90h=68h+28h=90hdaadaa ;十进制调整:;十进制调整:(alal)=96h=96h ;实现压缩;实现压缩bcdbcd码加法:码加法:68+28=9668+28=96(2)减法的十进制调整指令dasn语句格式:语句格式:dasdasn功能:如果(功能:如果(afaf)=1=1或或alal寄存器中低寄存器中低4 4位大于位大于9 9,则(,则(al
35、al)= =(alal)6 6且(且(afaf)=1=1;如果(;如果(alal)=0a0h=0a0h或(或(cfcf)=1=1,则(则(alal)= =(alal)60h60h且(且(cfcf)=1=1。同时。同时sfsf、zfzf、pfpf均均受影响。受影响。n【例】压缩【例】压缩bcdbcd码的减法运算。码的减法运算。nmovmovalal,68h 68h ;(alal)=68h=68h,表示压缩,表示压缩bcdbcd码码6868movmovblbl,28h 28h ;(blbl)=28h=28h,表示压缩,表示压缩bcdbcd码码2828subsubalal,blbl ;二进制减法:;
36、二进制减法:(alal)=68h=68h28h=40h28h=40hdasdas ;十进制调整:;十进制调整:(alal)=40h=40h ;实现压缩;实现压缩bcdbcd码减法:码减法:686828=4028=402非压缩bcd码调整指令n(1)加法的非压缩bcd码调整指令aaan(2)减法的非压缩bcd码调整指令aasn(3)乘法的非压缩bcd码调整指令aamn(4)除法的非压缩bcd码调整指令aadn语句格式:aaa n功能:如果al的低4位大于9或(af)=1,则:(al)=(al)+6(ah)=(ah)+1(cf)=(cf)=1且al高4位清零。否则:(cf)=(af)=0al高4位
37、清零。(1)加法的非压缩bcd码调整指令aaan语句格式:aas n功能:如果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码调整指令aasn语句格式:aam n功能:被调整的乘积在ax中,对al按10取模,则:(al)0ahah(商):al(余数)其中ah为商,al为余数,标志位af、cf、of、pf、sf、zf受影响。 (3)乘法的非压缩bcd码调整指令aam语句格式:aad n功能:除法运算前,先调整被除数ax
38、内容,使: (al)=(al)+(ah)*0ah (ah)=0即把非压缩型十进制数变成二进制数。(4)除法的非压缩bcd码调整指令aad逻辑运算和位操作类指令逻辑运算指令n1求反指令notn2逻辑乘指令andn3测试指令testn4逻辑加指令orn5按位加指令xorn语句格式:语句格式:not opdnot opdn功能:将目的地址中的内容逐位取反后送入目的地功能:将目的地址中的内容逐位取反后送入目的地址。址。即(即(opdopd)求反)求反opd opd 【例】【例】逻辑非运算。逻辑非运算。movmovaxax,878ah878ah;(axax)=878ah=878ahnotnotaxax
39、;(axax)=7875h=7875h1求反指令notn语句格式:语句格式:and opdand opd, opsopsn功能:将目的操作数和源操作数进行逻辑乘运算,结功能:将目的操作数和源操作数进行逻辑乘运算,结果存目的地址。果存目的地址。即(即(opdopd)(opsops)opdopd。该指令用于清除目的操作数中与源操作数置该指令用于清除目的操作数中与源操作数置0 0的对应位。的对应位。说明:逻辑乘的运算法则为:说明:逻辑乘的运算法则为:11=111=1,10=010=0,01=001=0,00=000=0【例】将【例】将alal中第中第3 3位和第位和第7 7位清零。位清零。movmo
40、valal,0ffh 0ffh andandalal,77h 77h 2逻辑乘指令andn语句格式:语句格式:test opdtest opd,opsops功能:源地址和目的地址的内容执行按位的逻辑乘运功能:源地址和目的地址的内容执行按位的逻辑乘运算,结果不送入目的地址。算,结果不送入目的地址。即(即(opdopd)(opsops)。)。【例】测试【例】测试axax中的第中的第1212位是否为位是否为0 0,不为,不为0 0则转则转l l。testtest ax ax,1000h1000hjnejne l l 3测试指令testn语句格式:语句格式:or opdor opd,opsops功能:
41、将目的操作数和源操作数进行逻辑加运算,结果存功能:将目的操作数和源操作数进行逻辑加运算,结果存目的地址。目的地址。即(即(opdopd)(opsops)opdopd。说明:逻辑加的运算法则为:说明:逻辑加的运算法则为:1 11=11=1,1 10=10=1,0 01=11=1,0 00=00=0。【例】将【例】将alal寄存器中第寄存器中第3 3位和第位和第7 7位置位置1 1。movmovalal,0 0 or or alal,88h88h 4逻辑加指令orn语句格式: xor opd,ops功能:目的操作数与源操作数做按位加运算,结果送入目的地址。即(opd)(ops) opd。说明:按位
42、加的运算法则为;11=0,10=1,01=1,00=0。【例】按位加运算。moval,45h;(al)=45hxoral,31h;(al)=74h5按位加指令xor移位指令 n移位指令包括算术移位指令、逻辑移位指令和循环移位指令,分别移位指令包括算术移位指令、逻辑移位指令和循环移位指令,分别进行左移和右移操作。这些指令均有统一的语句格式:进行左移和右移操作。这些指令均有统一的语句格式:sal/shl opd, ops ;sal/shl opd, ops ;左移左移sar opd, ops ;sar opd, ops ;算术右移算术右移 shr opd, ops ;shr opd, ops ;逻
43、辑右移逻辑右移其中其中,opd,opd是是8/16/328/16/32位的位的r/m;opsr/m;ops是计数值是计数值( (即移位次数即移位次数),),有三种情有三种情形形:ops:ops即可是即可是8 8位的立即数或位的立即数或clcl的内容的内容( (移位前次数移位前次数-cl)-cl)。其功能为将目的操作数的所有位按操作符规定的方式移动其功能为将目的操作数的所有位按操作符规定的方式移动1 1位或按寄位或按寄存器存器clcl规定的次数(规定的次数(02550255)移动,结果送入目的地址。目的操作数)移动,结果送入目的地址。目的操作数是是8 8位(或位(或1616位)的寄存器数据或存储
44、器数据。位)的寄存器数据或存储器数据。语句格式:sal opd,1 或shl opd,1 sal opd,cl或shl opd,cl功能:将(opd)向左移动cl指定的次数,最低位补入相应的,的内容为最后移入位的值。1算术左移和逻辑左移指令sal(shl)语句格式:sar opd,1或sar opd,clncf功能:将(opd)向右移动cl指定的次数且最高位保持不变;cf的内容为最后移入位的值。2算术右移指令sarmovbh,0f4h;(bh)=0f4hmovcl, 2;(cl)=2sarbh, cl;(bh)=0fdh,(cf)=0该例语句“sarbh,cl”实际上完成了(bh)bh的运算,
45、所以,用sar指令可以实现对有符号数除2n的运算(n为移位次数)。【例】算术右移运算n语句格式:shr opd,1或shr opd,cln功能:将(opd)向右移动cl规定的次数,最高位补入相应个数的,cf的内容为最后移入位的值。 3逻辑右移指令shrn语句格式:rol opd,1或rol lpd,cln功能:将目的操作数的最高位与最低位连成一个环,将环中的所有位一起向左移动cl规定的次数。cf的内容为最后移入位的值。4循环左移指令roln语句格式: ror opd,1或ror opd,cln功能:将目的操作数的最高位与最低位连成一个环,将环中的所有位一起向右移动cl规定的次数,cf的内容为最
46、后移入位的值。5循环右移指令rorn语句格式: rcl opd, 1或rcl opd,cln功能:将目的操作数连同cf标志一起向左循环移动cl规定的次数。 6带进位的循环左移指令rcln语句格式:rcr opd,1或rcr od,cln功能:将目的操作数连同cf标志一起向右循环移动所规定的次数。 7带进位的循环右移指令rcr串操作类指令n串操作指令 : 数据传送类指令每次只能传送一个数据,若要传送大批数据就需要重复编程,这样就浪费了大量的时间和空间。为此8086提供了一组处理主存中连续存放数据串的指令,这就是串操作指令。 下图流程图总结了串操作的过程 串操作流程图串操作流程图n语句格式: mo
47、vsb字节串传送 movsw字串传送功能:将以si为指针的源串中的一个字节(或字)存储单元中的数据传送至以di为指针的目的地址中去,并自动修改指针,使之指向下一个字节(或字)存储单元。即:(ds:si)es:di。 当df=0时,(si)和(di)增量。当df=1时,(si)和(di)减量。1传送指令movsn语句格式: cmpsb字节串比较 cmpsw字串比较功能:将si所指的源串中的一个字节(或字)存储单元中的数据与di所指的目的串中的一个字节(或字)存储单元中的数据相减,并根据相减的结果设置标志,但结果并不保存。即:(si)(di)。 修改串指针,使之指向串中的下一个元素。当df=0时,
48、(si)和(di)增量。当df=1时,(si)和(di)减量。2串比较指令cmps n语句格式: scasb字节串搜索 scasw字串搜索功能:al(字节)或ax(字)中的内容与di所指的目的串中的一个字节(或字)存储单元中的数据相减,根据相减结果设置标志位,结果不保存,即: 字节操作:(al)(di),字操作:(ax)(di)。 修改指针使之指向串中的下一个元素。当df=0时,(di)增量。当df=1时,(di)减量。3串搜索指令scasn语句格式: lodsb从字节串中取数 lodsw从字串中取数功能:将si所指的源串中的一个字节(或字)存储单元中的数据取出来送入al(或ax)中。即: 字
49、节操作:(si)al,字操作:(si)ax。 修改指针si,使它指向串中的下一个元素。当df=0时,(si)增量。当df=1时,(si)减量。 4从源串中取数指令lodsn语句格式: stosb往字节串中存数(2)stosw往字串中存数功能:将al或ax中的数据送入di所指的目的串中的字节(或字)存储单元中。即: 字节操作:(al)di,字操作:(ax)di。 修改指针di,使之指向串中的下一个元素。当df=0时,(di)增量)。当df=1时,(di)减量。5往目的串中存数指令stosn(1 1)rep rep reprep前缀用在前缀用在movsmovs、stos stos 、lodslod
50、s指令前。指令前。功能:每执行一次串指令(功能:每执行一次串指令(cxcx)1 1,直到(,直到(cxcx)=0=0,重复执行结束。,重复执行结束。n(2 2)repz repz 该指令一般用在该指令一般用在cmpcmp、scasscas指令前。指令前。功能:每执行一次串指令(功能:每执行一次串指令(cxcx)1 1,并判断,并判断zfzf标志是否为标志是否为0 0,只要(,只要(cxcx)=0=0或或zf=0zf=0,则重复执行结束。,则重复执行结束。n(3 3)repnz repnz 该指令一般用在该指令一般用在cmpscmps、scas scas 指令前。指令前。功能:每执行一次串指令(
51、功能:每执行一次串指令(cxcx)1 1,并判断,并判断zfzf标志是否为标志是否为0 0,只要(,只要(cxcx)=0=0或或zf=1zf=1,则重复执行结束。,则重复执行结束。6 6重复前缀指令重复前缀指令rep repz repnzrep repz repnz控制转移类指令n条件转移指令n无条件转移指令n循环指令 n子程序调用指令n中断指令条件转移指令n1简单条件转移指令n2无符号数条件转移指令n3. 有符号数条件转移指令 n语句格式:操作符 短标号功能:如果条件满足,则(ip)位移量ip。1简单条件转移指令2无符号数条件转移指令n【例】比较无符号数大小,将较大的数存放ax寄存器ncmp
52、 ax, bx ;(ax)(bx)jnbnext ;若ax=bx,转移到nextxchg ax,bx ;若ax=bx,转移到nextxchg ax,bx;若axal(出口参数);如果检测到读入的字符是ctrlbreak,则中止程序执行。例:nmov ah,01h n键盘输入子程序,功能1-ah int 21h dos子程序调用,等待键入一个字符调用后,输入字符的ascii码值-al2、显示输出一个字符ah=02hn将dl寄存器的字符(ascii码值)送到标准输出设备上输出。若检测到ctrlbreak间,则执行中断“int 23h”中止程序的执行。例:nmov dl,al ;al内容是字符的as
53、cii码-dl mov ah,2 ;功能号2-ah int 21h ;调用显示一个字符3.打印机输出一个字符ah=05hn将要打印的字符dl,然后调用就可以打印输出。如果有标准打印设备不输出,可在执行时用dos命令键ctrlbreak进行帮助。例:nmov dl,al ;al的字符ascii码-dl mov ah,5 ;功能号5-ah int 21h ;调用打印一个字符4、直接控制台输入ah=07hn输入时不回显,例如,从键盘输入一个字符,在屏幕上不显示,出口参数al键入的字符。可用来设置保密口令。例: password db 10dup(0) . mov cx,6 mov si,0 again: mov ah,7 int 21h mov passwordsi,al i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030工业控制芯片功能安全认证体系深度分析报告
- 2025-2030工业废水处理技术升级与环保政策合规性分析报告
- 2025-2030工业大数据平台架构设计与行业应用落地案例分析报告
- 2025-2030工业大数据分析平台建设需求与企业数字化转型关联研究报告
- 2025-2030工业大数据分析平台企业采纳意愿影响因素报告
- 律师见证申请书
- 武汉市种养产品收购合同5篇
- 游泳协会申请书
- 怎样写项目申请书
- 经验分享讲申请书
- 《浅析企业破产程序中债委会设立问题》6700字(论文)
- 2025年广东肇庆市高三二模高考生物试卷试题(含答案解析)
- 燃煤机组深度调峰技术应用研究
- 房屋市政工程生产安全重大事故隐患排查表(2024版)
- 网络剧配音演员合同样本
- DB51T 1806-2014 林业治山调查规划设计技术规程
- 高压电缆迁改工程施工方案
- 管理患者期望
- 节前安全教育交底
- 研究开发项目(项目计划书、立项决议、项目结题书)模板
- 人教版(2024新版)七年级上册英语期末复习:阅读理解 20篇练习题汇编(含答案解析)
评论
0/150
提交评论