汇编语言2-2(精品).ppt

上传人:hyn****60 文档编号:71977346 上传时间:2023-02-08 格式:PPT 页数:91 大小:1.35MB
返回 下载 相关 举报
汇编语言2-2(精品).ppt_第1页
第1页 / 共91页
汇编语言2-2(精品).ppt_第2页
第2页 / 共91页
点击查看更多>>
资源描述

《汇编语言2-2(精品).ppt》由会员分享,可在线阅读,更多相关《汇编语言2-2(精品).ppt(91页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、教学提示在在正正确确理理解解每每条条指指令令的的功功能能基基础础上上,可可以以阅阅读读和和编编写写有有实际意义的程序段实际意义的程序段第 2 章2.3 位操作类指令位位操操作作类类指指令令以以二二进进制制位位为为基基本本单单位位进进行行数数据据的的操操作作;这这是是一一类类常常用用的的指指令,都应该特别掌握令,都应该特别掌握注意这些指令对标志位的影响注意这些指令对标志位的影响1、逻辑运算指令、逻辑运算指令AND OR XOR NOT TEST2、移位指令移位指令SHL SHR SAR3、循环移位指令循环移位指令ROL ROR RCL RCR第 2 章逻辑与指令AND对对两两个个操操作作数数执执

2、行行逻逻辑辑与与运运算算,结结果果送到目的操作数送到目的操作数AND指指令令设设置置CF=OF=0,根根据据结结果果设置设置SF、ZF和和PF状态,而对状态,而对AF未定义未定义AND AND reg,imm/reg/memreg,imm/reg/mem ;regregregregimm/reg/memimm/reg/memAND AND mem,imm/regmem,imm/reg ;memmemmemmemimm/regimm/reg 只只有有相相“与与”的的两两位位都都是是1,结结果果才才是是1;否否则则,“与与”的的结结果果为为0ANDAND第 2 章逻辑或指令OR对对两两个个操操作作

3、数数执执行行逻逻辑辑或或运运算算,结结果果送到目的操作数送到目的操作数OR指指令令设设置置CF=OF=0,根根据据结结果果设设置置SF、ZF和和PF状态,而对状态,而对AF未定义未定义OR OR reg,imm/reg/memreg,imm/reg/mem ;regregregregimm/reg/memimm/reg/memOR OR mem,imm/regmem,imm/reg ;memmemmemmemimm/regimm/reg 只只要要相相“或或”的的两两位位有有一一位位是是1,结果就是,结果就是1;否则,结果为;否则,结果为0OROR第 2 章逻辑异或指令XOR对对两两个个操操作作

4、数数执执行行逻逻辑辑异异或或运运算算,结结果送到目的操作数果送到目的操作数XOR指指令令设设置置CF=OF=0,根根据据结结果果设置设置SF、ZF和和PF状态,而对状态,而对AF未定义未定义XOR XOR reg,imm/reg/memreg,imm/reg/mem ;regregregregimm/reg/memimm/reg/memXOR XOR mem,imm/regmem,imm/reg ;memmemmemmemimm/regimm/reg 只只有有相相“异异或或”的的两两位位不不相相同同,结果才是结果才是1;否则,结果为;否则,结果为0XORXOR第 2 章逻辑非指令NOT对一个操

5、作数执行逻辑非运算对一个操作数执行逻辑非运算NOT指令是一个单操作数指令指令是一个单操作数指令NOT指令不影响标志位指令不影响标志位NOT NOT reg/memreg/mem ;reg/memreg/memreg/memreg/mem 按按位位取取反反,原原来来是是“0”的的位位变变为为“1”;原原来来是是“1”的的位位变变为为“0”NOTNOT例题:逻辑运算例题:逻辑运算movmov al,45h al,45h;逻辑与逻辑与 al=01hal=01handand al,31h al,31h;CF=OF=0CF=OF=0,SF=0SF=0、ZF=0ZF=0、PF=0PF=0movmov al

6、,45h al,45h;逻辑或逻辑或 al=75hal=75horor al,31h al,31h;CF=OF=0CF=OF=0,SF=0SF=0、ZF=0ZF=0、PF=0PF=0movmov al,45h al,45h;逻辑异或逻辑异或 al=74hal=74hxorxor al,31h al,31h;CF=OF=0CF=OF=0,SF=0SF=0、ZF=0ZF=0、PF=1PF=1movmov al,45h al,45h;逻辑非逻辑非 al=0bahal=0bahnotnot al al;标志不变标志不变例题:逻辑指令应用例题:逻辑指令应用;ANDAND指指令令可可用用于于复复位位某某些

7、些位位(同同0 0相相与与),不不影响其他位:将影响其他位:将BLBL中中D D3 3和和D D0 0位清位清0 0,其他位不变,其他位不变andand bl,11110110B bl,11110110B;OROR指指令令可可用用于于置置位位某某些些位位(同同1 1相相或或),不不影影响其他位:将响其他位:将BLBL中中D D3 3和和D D0 0位置位置1 1,其他位不变,其他位不变oror blbl,00001001B,00001001B;XORXOR指指令令可可用用于于求求反反某某些些位位(同同1 1相相异异或或),不影响其他位:将不影响其他位:将BLBL中中D D3 3和和D D0 0

8、位求反,其他不变位求反,其他不变xorxor blbl,00001001B,00001001B第 2 章测试指令TEST对对两两个个操操作作数数执执行行逻逻辑辑与与运运算算,结结果果不回送到目的操作数不回送到目的操作数AND指指令令设设置置CF=OF=0,根根据据结结果果设置设置SF、ZF和和PF状态,而对状态,而对AF未定义未定义TEST TEST reg,imm/reg/memreg,imm/reg/mem;regregimm/reg/memimm/reg/memTEST TEST mem,imm/regmem,imm/reg;memmemimm/regimm/reg只只有有相相“与与”的

9、的两两位位都都是是1,结结果果才才是是1;否否则则,“与与”的的结结果果为为0TESTTEST例例2.32:测试为:测试为0或或1test al,01htest al,01h;测试测试ALAL的最低位的最低位D D0 0jnzjnz there there;标志标志ZF=0ZF=0,即,即D D0 0=1=1;则程序转移到则程序转移到therethere.;否则否则ZF=1ZF=1,即,即D D0 0=0=0,顺序执行顺序执行there:.there:.TEST指指令令通通常常用用于于检检测测一一些些条条件件是是否否满足,但又不希望改变原操作数的情况满足,但又不希望改变原操作数的情况TESTT

10、EST第 2 章移位指令(shift)将将操操作作数数移移动动一一位位或或多多位位,分分成成逻逻辑辑移移位位和和算术移位,分别具有左移或右移操作算术移位,分别具有左移或右移操作SHL reg/mem,1/CLSHL reg/mem,1/CL;逻辑左移,最高位进入逻辑左移,最高位进入CFCF,最低位补最低位补0 0SHR reg/mem,1/CLSHR reg/mem,1/CL;逻辑右移,最低位进入逻辑右移,最低位进入CFCF,最高位补最高位补0 0SAL reg/mem,1/CLSAL reg/mem,1/CL;算术左移,最高位进入算术左移,最高位进入CFCF,最低位补最低位补0 0SAR r

11、eg/mem,1/CLSAR reg/mem,1/CL;算术右移,最低位进入算术右移,最低位进入CFCF,最高位不变最高位不变SALSAL与与SHLSHL相同相同演示演示演示演示演示演示演示演示演示演示演示演示第 2 章移位指令的操作数移移位位指指令令的的第第一一个个操操作作数数是是指指定定的的被被移移位位的的操操作作数数,可可以以是是寄寄存存器器或或存储单元存储单元后后一一个个操操作作数数表表示示移移位位位位数数,该该操操作作数数为为1,表表示示移移动动一一位位;当当移移位位位位数数大大于于1时时,则则用用CL寄寄存存器器值值表表示,该操作数表达为示,该操作数表达为CL第 2 章移位指令对标

12、志的影响按照移入的位设置进位标志按照移入的位设置进位标志CF根据移位后的结果影响根据移位后的结果影响SF、ZF、PF对对AF没有定义没有定义如如果果进进行行一一位位移移动动,则则按按照照操操作作数数的的最最高高符符号号位位是是否否改改变变,相相应应设设置置溢溢出出标标志志OF:如如果果移移位位前前的的操操作作数数最最高高位位与与移移位位后后操操作作数数的的最最高高位位不不同同(有有变变化化),则则OF=1;否否则则OF=0。当当移移位次数大于位次数大于1时,时,OF不确定不确定例例2.33:移位指令:移位指令movmov cl,4 cl,4movmov al,0f0h al,0f0h;al=f

13、0hal=f0hshlshl al,1 al,1;al=e0hal=e0h;CF=1CF=1,SF=1SF=1、ZF=0ZF=0、PF=0PF=0,OF=0OF=0shrshr al,1 al,1;al=70hal=70h;CF=0CF=0,SF=0SF=0、ZF=0ZF=0、PF=0PF=0、OF=1OF=1sarsar al,1 al,1;al=38hal=38h;CF=0CF=0,SF=0SF=0、ZF=0ZF=0、PF=0PF=0、OF=0OF=0sarsar al,clal,cl;al=03hal=03h;CF=1CF=1,SF=0SF=0、ZF=0ZF=0、PF=1PF=1第 2

14、章循环移位指令(rotate)将将操操作作数数从从一一端端移移出出的的位位返返回回到到另另一一端端形形成成循循环环,分分成成不不带带进进位位和和带带进进位位,分别具有左移或右移操作分别具有左移或右移操作ROL reg/mem,1/CL ROL reg/mem,1/CL ;不带进位循环左移不带进位循环左移ROR reg/mem,1/CL ROR reg/mem,1/CL ;不带进位循环右移不带进位循环右移RCL reg/mem,1/CL RCL reg/mem,1/CL ;带进位循环左移带进位循环左移RCR reg/mem,1/CL RCR reg/mem,1/CL ;带进位循环右移带进位循环右

15、移演示演示演示演示演示演示演示演示演示演示演示演示演示演示演示演示第 2 章循环移位指令对标志的影响按照指令功能设置进位标志按照指令功能设置进位标志CF不影响不影响SF、ZF、PF、AF如如果果进进行行一一位位移移动动,则则按按照照操操作作数数的的最最高高符符号号位位是是否否改改变变,相相应应设设置置溢溢出出标标志志OF:如如果果移移位位前前的的操操作作数数最最高高位位与与移移位位后后操操作作数数的的最最高高位位不不同同(有有变变化化),则则OF=1;否否则则OF=0。当当移移位次数大于位次数大于1时,时,OF不确定不确定例例2.35:32位数移位位数移位;将;将DX.AXDX.AX中中323

16、2位数值左移一位位数值左移一位shlshl ax,1 ax,1rclrcl dx,1 dx,1DXAXCF0例例2.36:位传送:位传送;把;把ALAL最低位送最低位送BLBL最低位,保持最低位,保持ALAL不变不变rorror bl,1 bl,1rorror al,1 al,1rclrcl bl,1 bl,1rolrol al,1 al,1AL、BLCFBLCFALCFAL之之D0例例2.37:BCD码合并码合并;AH.ALAH.AL分别存放着非压缩分别存放着非压缩BCDBCD码的两位码的两位;将它们合并成为一个压缩;将它们合并成为一个压缩BCDBCD码存码存ALALand ax,0f0fh

17、and ax,0f0fh;保证高保证高4 4位为位为0 0movmov cl,4 cl,4rolrol ah,clah,cl;也可以用也可以用shlshl ah,clah,cladd al,ahadd al,ah;也可以用也可以用or al,ahor al,ah第 2 章2.4 控制转移类指令控控制制转转移移类类指指令令用用于于实实现现分分支支、循循环环、过过程程等等程程序序结结构构,是是仅仅次次于于传传送送指指令令的最常用指令的最常用指令重点掌握:重点掌握:JMP/Jcc/LOOP CALL/RETINT n/IRET 常用系统功能调用常用系统功能调用一般了解:一般了解:LOOPZ/LOOP

18、NZ INTO 控控制制转转移移类类指指令令通通过过改改变变IP(和和CS)值值,实现程序执行顺序的改变实现程序执行顺序的改变2.4.1 无条件转移指令只只要要执执行行无无条条件件转转移移指指令令JMP,就就使使程程序序转转到到指指定定的的目目标标地地址址处处,从从目目标标地地址址处处开开始始执执行那里的指令行那里的指令操操作作数数label是是要要转转移移到到的的目目标标地地址址(目目的的地地址址、转移地址转移地址)JMP指令分成指令分成4种类型:种类型:段内转移、直接寻址段内转移、直接寻址 段内转移、间接寻址段内转移、间接寻址 段间转移、直接寻址段间转移、直接寻址 段间转移、间接寻址段间转

19、移、间接寻址JMP labelJMP label;程序转向程序转向labellabel标号指定的地址标号指定的地址JMPJMP第 2 章目标地址的寻址方式直接寻址方式直接寻址方式n转转移移地地址址象象立立即即数数一一样样,直直接接在在指指令令的的机机器器代代码码中中,就就是是直直接接寻寻址方式址方式间接寻址方式间接寻址方式n转转移移地地址址在在寄寄存存器器或或主主存存单单元元中中,就就是是通通过过寄寄存存器器或或存存储储器器的的间间接接寻址方式寻址方式第 2 章用标号表达用标号表达用寄存器或存储器用寄存器或存储器操作数表达操作数表达JMPJMP目标地址的范围:段内段内转移段内转移近转移(近转移

20、(near)n在在当当前前代代码码段段64KB范范围围内内转转移移(32KB范围)范围)n不不需需要要更更改改CS段段地地址址,只只要要改改变变IP偏移地址偏移地址段内转移段内转移短转移(短转移(short)n转转移移范范围围可可以以用用一一个个字字节节表表达达,在段内在段内128127范围的转移范围的转移代代码码段段代代码码段段第 2 章JMPJMP目标地址的范围:段间段间转移段间转移远转移(远转移(far)n从从当当前前代代码码段段跳跳转转到到另另一一个个代码段,可以在代码段,可以在1MB范围范围n需需要要更更改改CS段段地地址址和和IP偏偏移移地址地址n目目标标地地址址必必须须用用一一个

21、个32位位数数表表达达,叫叫做做32位位远远指指针针,它它就是逻辑地址就是逻辑地址第 2 章代代码码段段代代码码段段 实实际际编编程程时时,汇汇编编程程序序会会根根据据目目标标地地址址的的距距离离,自动处理自动处理成短转移、近转移或远转移成短转移、近转移或远转移 程序员可用操作符程序员可用操作符short、near ptr 或或far ptr 强制强制JMPJMPJMPJMP段内转移、直接寻址JMP labelJMP label;IPIP+IPIP+位移量位移量位位移移量量是是紧紧接接着着JMP指指令令后后的的那那条条指指令令的的偏偏移移地地址址,到目标指令的偏移地址的地址位移到目标指令的偏移

22、地址的地址位移当当向向地地址址增增大大方方向向转转移移时时,位位移移量量为为正正;向向地地址址减减小方向转移时,位移量为负小方向转移时,位移量为负jmpjmp againagain;转移到转移到againagain处继续执行处继续执行again:again:decdec cxcx;标号标号againagain的指令的指令jmpjmp outputoutput;转向转向outputoutputoutput:output:movmov result,al result,al;标号标号outputoutput的指令的指令第 2 章实际为相对寻址实际为相对寻址段内转移、间接寻址JMP r16/m16

23、JMP r16/m16;IPr16/m16IPr16/m16将将一一个个1616位位寄寄存存器器或或主主存存字字单单元元内内容容送送入入IPIP寄寄存存器器,作作为为新新的的指指令令指指针针,但但不不修修改改CSCS寄寄存存器的内容器的内容jmpjmp ax ax;IPAXIPAXjmpjmp word word ptrptr 2000h 2000h;IP2000hIP2000h第 2 章JMPJMPJMPJMP段间转移、直接寻址JMP far JMP far ptrptr label label;IPlabelIPlabel的偏移地址的偏移地址;CSlabelCSlabel的段地址的段地址将

24、将标标号号所所在在段段的的段段地地址址作作为为新新的的CS值值,标标号号在在该该段段内内的的偏偏移移地地址址作作为为新新的的IP值值;这这样,程序跳转到新的代码段执行样,程序跳转到新的代码段执行jmpjmp far far ptrptr othersegotherseg;远转移到代码段远转移到代码段2 2的的othersegotherseg第 2 章JMPJMP段间转移、间接寻址JMP far JMP far ptrptr memmem;IPmemIPmem,CSmem+2CSmem+2用用一一个个双双字字存存储储单单元元表表示示要要跳跳转转的的目目标标地地址址。这这个个目目标标地地址址存存放

25、放在在主主存存中中连连续续的的两两个个字字单单元元中中的的,低低位位字字送送IPIP寄寄存存器器,高高位位字字送送CSCS寄存器寄存器movmov word word ptrptr bx,0 bx,0movmov word word ptrptr bx+2,1500h bx+2,1500hJMP far JMP far ptrptr bxbx ;转移到转移到1500h:01500h:0第 2 章JMPJMP2.4.2 条件转移指令指指定定的的条条件件cc如如果果成成立立,程程序序转转移移到到由由标标号号label指指定定的的目目标标地地址址去去执执行行指指令令;条条件件不不成成立立,则则程程序

26、序将将顺顺序序执执行行下一条指令下一条指令操操作作数数label是是采采用用短短转转移移,称称为为相相对对寻址方式寻址方式JccJccJccJcc label label ;条件满足,发生转移:条件满足,发生转移:IPIPIPIP8 8位位移量位位移量 ;条件不满足,顺序执行;条件不满足,顺序执行第 2 章第 2 章相对寻址方式Jcc指令的操作数指令的操作数label是一个标号是一个标号n一一个个8位位位位移移量量,表表示示Jcc指指令令后后的的那那条条指指令令的的偏偏移移地地址址,到到目目标标指指令令的的偏偏移移地地址址的地址位移的地址位移n8位位位位移移量量是是相相对对于于当当前前IP的的

27、,且且距距当当前前IP地地址址128127个个单单元元的的范范围围之之内内,属于段内短距离转移属于段内短距离转移nJcc目标地址就采用这种目标地址就采用这种相对寻址方式相对寻址方式Jcc指指令令为为2个个字字节节,条条件件不不满满足足时时的的顺序执行就是当前指令偏移指针顺序执行就是当前指令偏移指针IP加加2JccJcc第 2 章Jcc指令的分类Jcc指指令令不不影影响响标标志志,但但要要利利用用标标志志(表表2.2)。根根据据利利用用的的标标志志位位不同,不同,16条指令分成条指令分成3种情况:种情况:1.判断单个标志位状态判断单个标志位状态2.比较无符号数高低比较无符号数高低3.比较有符号数

28、大小比较有符号数大小JccJcc第 2 章1.判断单个标志位状态这组指令单独判断这组指令单独判断5个状态标志之一个状态标志之一JZ/JE和和JNZ/JNE:利利用用零零标标志志ZF,判判断断结结果是否为零(或相等)果是否为零(或相等)JS和和JNS:利利用用符符号号标标志志SF,判判断断结结果果是是正是负正是负JO和和JNO:利利用用溢溢出出标标志志OF,判判断断结结果果是是否产生溢出否产生溢出JP/JPE和和JNP/JPO:利利用用奇奇偶偶标标志志PF,判判断结果中断结果中“1”的个数是偶是奇的个数是偶是奇JC/JB/JNAE和和JNC/JNB/JAE:利利用用进进位位标志标志CF,判断结果

29、是否进位或借位判断结果是否进位或借位JccJcc例题例题2.38例题例题2.39例题例题2.40例题例题2.41例题例题2.42第 2 章比较无符号数高低无无符符号号数数的的大大小小用用高高(Above)低低(Below)表示表示利利用用CF确确定定高高低低、利利用用ZF标标志志确确定定相相等(等(Equal)两数的高低分成两数的高低分成4种关系:种关系:低于(不高于等于):低于(不高于等于):JB(JNAE)不低于(高于等于):不低于(高于等于):JNB(JAE)低于等于(不高于):低于等于(不高于):JBE(JNA)不低于等于(高于):不低于等于(高于):JNBE(JA)JccJcc例例2

30、.43a:比较无符号数比较无符号数cmpcmp ax,bxax,bx;比较比较axax和和bxbxjnbjnb next next;若;若axaxbxbx,转移转移xchgxchg ax,bxax,bx;若;若axaxbxbx,交换交换next:next:.结果:结果:AX保存较大的保存较大的无符号数无符号数第 2 章比较有符号数大小有有符符号号数数的的大大(Greater)小小(Less)需需要要组组合合OF、SF标标志志,并并利利用用ZF标标志志确定相等(确定相等(Equal)两数的大小分成两数的大小分成4种关系:种关系:小于(不大于等于):小于(不大于等于):JL(JNGE)不小于(大于

31、等于):不小于(大于等于):JNL(JGE)小于等于(不大于):小于等于(不大于):JLE(JNG)不小于等于(大于):不小于等于(大于):JNLE(JG)JccJcc例例2.43b:比较有符号数比较有符号数cmpcmp ax,bxax,bx;比较比较axax和和bxbxjnljnl next next;若;若axaxbxbx,转移转移xchgxchg ax,bxax,bx;若;若axaxbxbx,交换交换next:next:.结果:结果:AX保存较大的保存较大的有符号数有符号数第 2 章2.4.3 循环指令(loop)循循环环指指令令默默认认利利用用CX计计数数器器,方方便便实实现现计数循环

32、的程序结构计数循环的程序结构label操作数采用操作数采用相对寻址方式相对寻址方式LOOP labelLOOP label;CXCXCXCX1 1,;CX0CX0,循环到标号循环到标号label,label,计数非零循环计数非零循环LOOPZ labelLOOPZ label;CXCXCXCX1 1,;CX0CX0且且ZFZF1 1,循环到标号循环到标号labellabelLOOPNZ labelLOOPNZ label;CXCXCXCX1 1,;CX0CX0且且ZFZF0 0,循环到标号循环到标号labellabelJCXZ labelJCXZ label;CXCX0 0,转移到标号转移到标

33、号labellabel例例2.44:记录空格个数:记录空格个数movmov cx,countcx,count;设置循环次数设置循环次数movmov si,offsetsi,offset string stringxorxor bx,bxbx,bx;bxbx0 0,记录空格数记录空格数jcxzjcxz done done ;如果长度为如果长度为0 0,退出,退出movmov al,20h al,20h;空格的空格的ASIC11ASIC11码为码为20h20hagain:again:cmpcmp al,es:sial,es:si jnzjnz next next;ZFZF0 0非空格,转移非空格,

34、转移inc inc bxbx;ZF=1ZF=1是空格,个数加是空格,个数加1 1next:next:inc inc sisiloop againloop again;字符个数减字符个数减1 1,不为,不为0 0继续循环继续循环dec cxjnz againcmp cx,0jz next第 2 章2.4.4 子程序指令子程序是完成特定功能的一段程序子程序是完成特定功能的一段程序当当主主程程序序(调调用用程程序序)需需要要执执行行这这个个功功能能时时,采采用用CALL调调用用指指令令转转移移到到该该子程序的起始处执行子程序的起始处执行当当运运行行完完子子程程序序功功能能后后,采采用用RET返返回指

35、令回到主程序继续执行回指令回到主程序继续执行演示演示演示演示子程序调用指令CALL指令分成指令分成4种类型(类似种类型(类似JMP)CALL label;段内调用、直接寻址段内调用、直接寻址CALL r16/m16;段内调用、间接寻址段内调用、间接寻址CALL far ptr label;段间调用、直接寻址段间调用、直接寻址CALL far ptr mem;段间调用、间接寻址段间调用、间接寻址CALL指令需要保存返回地址:指令需要保存返回地址:n段内调用段内调用入栈偏移地址入栈偏移地址IPSPSP2,SS:SPIPn段间调用段间调用入栈偏移地址入栈偏移地址IP和段地址和段地址CSSPSP2,S

36、S:SP CS SPSP2,SS:SPIP第 2 章CALLCALL子程序返回指令根据段内和段间、有无参数,分成根据段内和段间、有无参数,分成4种类型种类型RET;无参数段内返回无参数段内返回RET i16;有参数段内返回有参数段内返回RET;无参数段间返回无参数段间返回RET i16;有参数段间返回有参数段间返回需要弹出需要弹出CALL指令压入堆栈的返回地址指令压入堆栈的返回地址n段内返回段内返回出栈偏移地址出栈偏移地址IPIPSS:SP,SPSP2n段间返回段间返回出栈偏移地址出栈偏移地址IP和段地址和段地址CSIPSS:SP,SPSP2CSSS:SP,SPSP2i16参数的作用参数的作用

37、RETRET第 2 章例例2.45:子程序:子程序;主程序;主程序movmov al,0fh al,0fh;提供参数提供参数ALALcallcall htoaschtoasc;调用子程序调用子程序.;子程序;子程序:将:将ALAL低低4 4位的一位位的一位1616进制数进制数转换转换成成ASCIIASCII码码htoaschtoasc:and al,0fhand al,0fh;只取只取alal的低的低4 4位位or al,30hor al,30h;alal高高4 4位变成位变成3 3cmpcmp al,39h al,39h;是;是0 09 9,还是,还是0Ah0Ah0Fh0Fhjbejbe h

38、toendhtoendadd al,7add al,7;是;是0Ah0Ah0Fh0Fh,加上加上7 7htoendhtoend:retret;子程序返回子程序返回转换原理转换原理转换原理转换原理第 2 章2.4.5 中断指令中中断断(Interrupt)是是又又一一种种改改变变程序执行顺序的方法程序执行顺序的方法中断具有多种中断具有多种中断类型中断类型中断的指令有中断的指令有3条:条:INT i8 IRET INTO本本节节主主要要掌掌握握类类似似子子程程序序调调用用指指令令的的中中断断调调用用指指令令INT i8,进进而而学学习习使用使用DOS功能调用功能调用第 2 章中断指令INTINT

39、i8INT i8;中断调用指令:产生中断调用指令:产生i8i8号中断号中断IRETIRET;中断返回指令:实现中断返回中断返回指令:实现中断返回INTOINTO;溢出中断指令:溢出中断指令:;若溢出标志;若溢出标志OF=1OF=1,产生产生4 4号中断号中断;否则顺序执行;否则顺序执行第 2 章2.4.6 系统功能调用21H号号中中断断是是DOS提提供供给给用用户户的的用用于于调调用用系系统统功功能能的的中中断断,它它有有近近百百个个功功能能供供用用户户选选择择使使用用,主主要要包包括括设设备备管管理理、目目录录管管理和文件管理三个方面的功能理和文件管理三个方面的功能ROM-BIOS也也以以中

40、中断断服服务务程程序序的的形形式式,向程序员提供系统的基本输入输出程序向程序员提供系统的基本输入输出程序汇汇编编语语言言程程序序设设计计需需要要采采用用系系统统的的各各种种功能程序功能程序充充分分利利用用操操作作系系统统提提供供的的资资源源是是程程序序设设计的一个重要方面,需要掌握计的一个重要方面,需要掌握第 2 章功能调用的步骤通常按照如下通常按照如下4 4个步骤进行:个步骤进行:在在AHAH寄存器中设置系统功能调用号寄存器中设置系统功能调用号 在指定寄存器中设置入口参数在指定寄存器中设置入口参数 执执行行指指令令INT INT 21H21H(或或ROM-BIOSROM-BIOS的的中中断断

41、向向量量号号)实实现现中中断断服服务务程程序序的的功功能能调用调用 根据出口参数分析功能调用执行情况根据出口参数分析功能调用执行情况输入输出类功能调用向显示器输出字符向显示器输出字符 字符的输出字符的输出 字符串的输出字符串的输出从键盘输入数据从键盘输入数据 字符的输入字符的输入 字符串的输入字符串的输入 按键的判断按键的判断裸机裸机汇编语言程序第 2 章第 2 章字符输出的功能调用DOS功能调用功能调用INT 21Hn功能号:功能号:AH02Hn入口参数:入口参数:DL字符的字符的ASCII码码n功功能能:在在显显示示器器当当前前光光标标位位置置显显示示给给定定的的字字符符,光光标标右右移移

42、一一个个字字符符位位置。如按置。如按Ctrl-Break或或Ctrl-C则退出则退出例例2.46:显示问号:显示问号;在当前显示器光标位置显示一个问号;在当前显示器光标位置显示一个问号movmov ah,02h ah,02h;设置功能号:设置功能号:ah02hah02hmovmov dl,?dl,?;提供入口参数:提供入口参数:dl?dl?intint 21h 21h;DOSDOS功能调用:显示功能调用:显示 进进行行字字符符输输出出时时,当当输输出出响响铃铃字字符符(07H)以以及及退退格格(08H)、回回车车(0DH)和和换换行行(0AH)字字符符时时,该该功功能能调调用用可可以以自自动动

43、识识别别并并能进行相应处理能进行相应处理第 2 章字符输出的功能调用显示器功能调用显示器功能调用INT 10Hn功能号:功能号:AH0EHn入口参数:入口参数:AL字符的字符的ASCII码码BL字符的颜色值(图形方式)字符的颜色值(图形方式)BH页号(字符方式)页号(字符方式)通常使通常使BX0n功功能能:将将字字符符按按原原属属性性在在光光标标处处显显示,光标自动移到下一个字符位置示,光标自动移到下一个字符位置第 2 章字符串输出的功能调用DOS功能调用功能调用INT 21Hn功能号:功能号:AH09Hn入口参数:入口参数:DS:DX欲显示字符串在主存中的首地址欲显示字符串在主存中的首地址字

44、符串应以字符串应以$(24H)结束结束n功能:在显示器输出指定的字符串功能:在显示器输出指定的字符串可可 以以 输输 出出 回回 车车(0DH)和和 换换 行行(0AH)字符产生回车和换行的作用字符产生回车和换行的作用例例2.47:显示字符串:显示字符串string db Hello,Everybody!,string db Hello,Everybody!,0dh,0ah,0dh,0ah,$;在数据段定义要显示的字符串在数据段定义要显示的字符串.movmov ah,09h ah,09h;设置功能号:设置功能号:ah09hah09hmovmov dx,offsetdx,offset strin

45、g string;提供入口参数:提供入口参数:dxdx字符串的偏移地址字符串的偏移地址intint 21h 21h;DOSDOS功能调用:显示功能调用:显示第 2 章字符(键盘)输入的功能调用DOS功能调用功能调用INT 21Hn功能号:功能号:AH01Hn出口参数:出口参数:AL字符的字符的ASCII码码n功能:获得按键的功能:获得按键的ASCII代码值代码值调调用用此此功功能能时时,若若无无键键按按下下,则则会会一一直直等等待待,直直到到按按键键后后才才读读取取该该键键值值例例2.48:判断按键:判断按键getkeygetkey:movmov ah,01h ah,01h;功能号:功能号:a

46、h01hah01hintint 21h 21h;功能调用功能调用cmpcmp al,Y al,Y;处理出口参数处理出口参数alaljeje yeskeyyeskey;是是“Y”Y”cmpcmp al,N al,Njeje nokeynokey;是是“N”N”jnejne getkeygetkey.yeskeyyeskey:.nokeynokey:.第 2 章字符输入的功能调用键盘功能调用键盘功能调用INT 16Hn功能号:功能号:AH00(读取键值)读取键值)n出口参数:出口参数:AX键值代码键值代码对对于于标标准准ASCII码码按按键键:ALASCII码码,AH扫描码;扫描码;对对于于扩扩展

47、展按按键键(组组合合键键、F1F10功功能能键键、光光标标控控制制键键等等):AL00H,AH键键扩扩展展码码(0FH84H);对对于于alt小小键键盘盘数数字字按按键键:ALASCII码码,AH00H此此功功能能类类同同DOS功功能能01H,会会一一直直等等待待按键按键例例2.49:字符输入输出:字符输入输出movmov ah,0 ah,0;键盘功能调用(键盘功能调用(intint 16h 16h)intint 16h 16h;alal按键的按键的ASCIIASCII码码movmov bx,0 bx,0;显示功能调用(显示功能调用(intint 10h 10h)movmov ah,0eh a

48、h,0ehintint 10h 10h;显示显示第 2 章字符串输入的功能调用DOS功能调用功能调用INT 21Hn功能号:功能号:AH0AHn入口参数:入口参数:DS:DX缓冲区首地址缓冲区首地址执执行行该该功功能能调调用用时时,用用户户按按键键,最最后后用回车确认用回车确认本本调调用用可可执执行行全全部部标标准准键键盘盘编编辑辑命命令令;用用户户按按回回车车键键结结束束输输入入,如如按按CtrlBreak或或CtrlC则中止则中止关键要定义好缓冲区关键要定义好缓冲区例例2.50:输入字符串:输入字符串bufferbufferdb 81 db 81;定义缓冲区定义缓冲区;第;第1 1个字节填

49、入可能输入的最大字符数个字节填入可能输入的最大字符数db 0db 0;存放实际输入的字符数存放实际输入的字符数db 81 dup(0)db 81 dup(0);存放输入的字符串存放输入的字符串.movmov dx,segdx,seg buffer buffer;伪指令伪指令segseg取得取得bufferbuffer的段地址的段地址movmov ds,dxds,dx;设置数据段设置数据段DSDSmovmov dx,offsetdx,offset buffer buffermovmov ah,0ah ah,0ahintint 21h 21h第 2 章按键判断的功能调用DOS功能调用功能调用INT

50、 21Hn功能号:功能号:AH0BHn出口参数:出口参数:AL0,当前没有按键;当前没有按键;ALFFH,当前已经按键。当前已经按键。n功功能能:仅仅判判断断当当前前是是否否有有按按下下的的键键,设置设置AL后退出后退出例例2.51:按任意键继续:按任意键继续.;提提示示“按按任任意意键键继继续续”getkeygetkey:movmov ah,0bh ah,0bhintint 21h 21hor al,alor al,al;alal0 0?jzjz getkeygetkey;alal0 0,没有按键,继续等待没有按键,继续等待;等同于如下功能调用;等同于如下功能调用mov ah,01hint

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁