




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章寻址方式一、数据寻址方式:与数据有关的寻址方式〔1〕16位寻址:操作数的偏移地址由16位二进制数组成,段地址保存在CS、DS、ES、SS中,20位物理地址是由段基地址加上操作数的偏移地址形成的,最大寻址空间为1MB。〔2〕32位寻址:32位微处理器在保护模式下的一种寻址方式,需要提供32位偏移地址。80x86从386起就把机器字长从16位增加在32位,相应的16位存放器也扩展为32位存放器〔EAX、EBX、ECX、EDX、ESP、EBP、EDI、ESI〕。兼容了16位寻址。在实模式下,这两种寻址方式可同时使用,但段的大小被限制在64KB之内。8086、80286不支持32位寻址方式。
二、指令寻址方式:与转移地址有关的寻址方式寻址方式:寻找数据和指令存放地址的方式。微型计算机系统的每一条指令通常由操作码字段和操作数字段两局部组成。〔1〕操作码字段:指出进行什么操作。每条指令都有自己的操作码;〔2〕操作数字段:指出大多数指令涉及的操作数和操作结果放在何处。①指出操作数的值为多少。②指出放在什么地方。③指出操作结果送到哪里去。三种类型的操作数:〔1〕立即数操作数:指令中直接给出数据,即立即数。〔2〕存放器操作数:操作数在存放器中。〔3〕存储器操作数:操作数在存储器〔内存〕中。可以是数据的地址,或其它能间接获得操作数的信息。操作数的设置情况:〔1〕有些指令需要一个操作数。例如:DECAL〔2〕有些指令需要两个操作数。例如:MOVAX,BXADDAX,BX〔3〕有些指令不需要操作数。例如:HLT有效地址:EA=基址+〔变址×比例因子〕+位移量〔X〕〔1〕位移量:是存放在指令中的一个8位、16位和32位的数,但它不是立即数,而是一个地址。〔2〕基址:是存放在基址存放器中的内容。它通常用来访问数组中的某个元素或字符串中的某个字符。〔3〕变址:是存放在变址存放器中的内容。它通常用来访问数组中的某个元素或字符串中的某个字符。〔4〕比例因子:是386及其后继机型中新增加寻址方式中的一个术语,其值可为1、2、4、8。在寻址中,可用变址存放器的内容乘以比例因子来取得变址值。这类寻址方式对访问长度为2、4、8字节的数组特别有用。操作数字段指出操作结果送到哪里去。有些指令需要两个操作数。目的操作数,源操作数例MOVAX,BX;〔BX〕→AX例ADDAX,BX;〔AX〕+〔BX〕→AX例SUBAX,BX;〔AX〕-〔BX〕→AX与数据有关的寻址方式
16位寻址立即寻址方式存放器寻址方式直接寻址方式存放器间接寻址方式存放器相对寻址方式基址加变址寻址方式相对基址加变址寻址方式寻址方式可能有三种情况:操作数包含在指令中,即指令的操作数字段就包含着操作数本身。这种寻址方式称为立即寻址,这种操作数就称为立即数。操作数包含在CPU的某一个内部存放器中,这时指令中的操作数字段是CPU内部存放器的一个编码,这种寻址方式称为存放器寻址。操作数在内存的数据区〔存储器〕中,这时指令中的操作数字段包含着此操作数的地址。8086/8088系统中的任何内存地址是由两局部组成的,即段基地址和偏移地址。为了适应要处理的各种数据结构的需要,这个段内偏移地址可以由几个局部组成,把它称为有效地址EA。1、立即寻址方式:n所提供的操作数〔立即数〕紧跟在操作码的后面,与操作码一起放在指令代码段中。立即数可以是8位数或16位数。只能用于源操作数字段,不能用于目的操作数字段,经常用于给存放器赋初值。
例1MOVAL,18;18→AL执行后:〔AL〕=12H
例2MOVAX,2000H;2000H→AL执行后:〔AX〕=2000H…E8H00H20H………CS以下为错误的指令:MOV18,AL;18←AL2、存放器寻址方式:R操作数包含于CPU的内部存放器之中。存放器名是操作数的符号地址,存放器的内容是指令所需的操作数。例3INCAX;〔AX〕+1→AX执行前:〔AX〕=3344H执行后:〔AX〕=3345H例4DECCX;〔CX〕-1→CX执行前:〔CX〕=78H执行后:〔CX〕=77H例5ADDAX,BX;〔AX〕+〔BX〕→AX执行前:〔AX〕=1234H,〔BX〕=5620H执行后:〔AX〕=6854H,〔BX〕=5620H例6MOVAX,BX;〔BX〕→AX执行前:〔AX〕=6789H,〔BX〕=0000H执行后:〔AX〕=0000H,〔BX〕=0000H以下为错误的指令:例MOVAL,256
例MOVAX,20000H例MOVAL,BX3、直接寻址方式:[n]操作数在存储器中。操作数的偏移地址直接包含在指令中,和指令操作码一起放在代码段,而操作数那么在数据段中。操作数的地址是数据段存放器DS中的内容左移4位后,加上指令给定的16位地址偏移量。默认段为数据段。例7MOVAX,[2000H];〔〔DS〕×10H+2000H〕→AX执行前:〔DS〕=3000H执行后:〔AX〕=5050H32000H………50H50H…CS00H20H………A1HDSAX跨段访问情况8086的存储器是分段使用的,通常,假设选用存放器〔BX、BP、SI和DI〕做间接存放器、变址存放器或基址存放器,只要有BP存放器出现,操作数就在当前的堆栈段。操作数的物理地址由堆栈段存放器SS的内容左移4位与偏移地址EA相加;否那么,操作数在当前数据段,此时,操作数的物理地址由数据段存放器DS的内容左移4位与偏移地址EA相加形成。这是8086的具体约定,即默认状态。当要否认默认状态,到非约定段寻址操作数时,必须用跨段前缀指明操作数所在段的段存放器名。段存放器名:偏移地址功能:冒号“:〞之前的段存放器指明了操作数所在段。无论是段默认情况,还是跨段情况,操作数的物理地址均由系统自动计算。隐含段段约定的寄存器主要用途CSIP指令寻址SSSP,BP堆栈寻址DSBX,SI,DI数据寻址ESDI目标串寻址隐含段:段地址和存放偏移地址的存放器在组合上有一定的规那么。假设操作数在当前数据段中,操作数的物理地址PA由数据段存放器DS的内容左移四位与地址存放器SI或DI的内容相加形成;假设操作数在当前堆栈段中,那么操作数的物理地址PA由堆栈段存放器SS的内容左移四位与基址存放器BP的内容相加形成,这是根本约定。跨段问题:段的跨越例如MOVAX,DS:[BP]MOVBX,ES:[BX]MOVCX,SS:[SI]MOVDX,SS:[DI]MOVAX,ES:[2000H]默认状态不起作用,操作数的物理地址由“:〞前面的段存放器内容左移4位与EA相加形成。段约定的寄存器主要用途CSIP指令寻址SSSP,BP堆栈寻址DSBX,SI,DI数据寻址ESDI目标串寻址例8MOVAX,ES:[2000H];〔〔ES〕×10H+2000H〕→AX执行前:〔ES〕=3000H执行后:〔AX〕=5050H…32000H………50H50H…CS00H20H……A2HESAX26HNEXT:MOVAL,DS:[SI]MOVES:[DI],AL跨段前缀跨段前缀NEXT:MOVAL,DS:[SI]MOVES:[2000H],AL操作数的偏移地址可以以变量的形式出现。在数据段中用伪指令DB〔1个字节〕、DW〔2个字节〕、DD〔4个字节〕、DQ〔8个字节〕、DT〔10个字节〕定义变量。
例9MOVAX,BUFA;〔〔DS〕×10H+1000H〕→AX执行前:假定BUFA在数据段中定义,EA=1000H,〔DS〕=2000H,〔AX〕=1122H,〔21000H〕=1259H执行后:〔AX〕=1259H,〔21000H〕=1259H21000H………59H12H…CS00H10H………E9H?DS1122HAX4、存放器间接寻址方式:[R]操作数在存储器中。操作数的有效地址由变址存放器SI、DI或基址存放器BX、BP提供。如果指令中指定的存放器是BX、SI、DI,那么用DS存放器的内容作为段地址。如指令中用BP存放器,那么操作数的段地址在SS中,即堆栈段。例10ADDAX,[SI];AX+〔〔DS〕×10H+〔SI〕〕→AX执行前:〔AX〕=1122H,〔SI〕=20H,〔DS〕=1000H,〔10020H〕=3344H执行后:〔AX〕=4466H,〔SI〕=20H,〔DS〕=1000H,〔10020H〕=3344H+10020H………44H33H…CS20H00H………E9H?DS1122HAX+变址寻址方式基址寻址方式例11SUBAX,[BP];AX-〔〔SS〕×10H+〔BP〕〕→AX执行前:〔AX〕=3344H,〔BP〕=30H,〔SS〕=2000H,〔20030H〕=1234H执行后:〔AX〕=2110H,〔BP〕=30H,〔SS〕=2000H,〔20030H〕=1234H-20030H………34H12H…CS30H00H………E9H?SS3344HAX-5、存放器相对寻址:X[R]操作数存放在存储器中。以指定的存放器内容,加上指令中给出的位移量〔8位或16位〕,并以一个段存放器为基准,作为操作数的地址。指定的存放器一般是一个基址存放器或变址存放器。例12MOVAX,5[BX];〔〔DS〕×10H+〔BX〕+5〕→AX执行前:〔AX〕=0000H,〔BX〕=1BH,〔DS〕=2000H,〔20020H〕=3789H执行后:〔AX〕=3789H,〔BX〕=1BH,〔DS〕=2000H,〔20020H〕=3789H20020H……89H37H…DS0000HAX…00H…5CS……E9H?1BH00例13MOV6[BP],BX;〔BX〕→〔SS〕×10H+〔BP〕+6执行前:〔BX〕=4000H,〔BP〕=30H,〔SS〕=2000H,〔20036H〕=0000H执行后:〔BX〕=4000H,〔BP〕=30H,〔SS〕=2000H,〔20036H〕=4000H20036H……00H00H…SS4000HBX…00H…6CS……E9H?30H006、基址加变址寻址方式:[BR][IR]操作数存放在存储器中。把一个基址存放器BX或BP的内容,加上变址存放器SI或DI的内容,并以一个段存放器作为地址基准,作为操作数的地址。当基址存放器为BX时,段存放器使用DS;当基址存放器为BP时,段存放器用SS。例14MOVAX,[BX][SI]MOVAX,[BX+SI];〔〔DS〕×10H+〔BX〕+〔SI〕〕→AX执行前:〔AX〕=45H,〔BX〕=30H,〔SI〕=20H,〔DS〕=1000H,〔10050H〕=9988H执行后:〔AX〕=9988H,〔BX〕=30H,〔SI〕=20H,〔DS〕=1000H,〔10050H〕=9988H10050H…DS0045HAX…88H99H………00H30H00HCS……E9H?20H例15MOV[BP][DI],BXMOV[BP+DI],BX;〔BX〕→〔SS〕×10H+〔BP〕+〔DI〕执行前:〔BX〕=3344H,〔BP〕=10H,〔DI〕=40H,〔SS〕=4000H,〔40050H〕=0000H执行后:〔BX〕=3344H,〔BP〕=10H,〔DI〕=40H,〔SS〕=4000H,〔40050H〕=3344H40050H…SS3344HBX…00H00H………00H10H00HCS……E9H?40H7、相对基址加变址寻址方式:X[BR][IR]操作数存放在存储器中。把一个基址存放器BX或BP的内容,加上变址存放器SI或DI的内容,再加上指令中给定的8位或16位位移量,并以一个段存放器作为地址基准,作为操作数的地址。当基址存放器为BX时,段存放器使用DS。当基址存放器为BP时,段存放器那么用SS。例16MOV2[BX+SI],AXMOV2[BX][SI],AX;〔AX〕→〔DS〕×10H+〔BX〕+〔SI〕+2执行前:〔AX〕=1200H,〔BX〕=300H,〔SI〕=50H,〔DS〕=1000H,〔10352H〕=??执行后:〔AX〕=1200H,〔BX〕=300H,〔SI〕=50H,〔DS〕=1000H,〔10352H〕=1200H…2100352HDS1200HAX…??………00H10H00HCS……E9H?40H00例17MOV4[BP+SI],CX;〔CX〕→〔SS〕×10H+〔BP〕+〔SI〕+4执行前:〔CX〕=1500H,〔BP〕=400H,〔SI〕=50H,〔SS〕=2000H,〔20454H〕=??执行后:〔CX〕=1500H,〔BP〕=400H,〔SI〕=50H,〔SS〕=2000H,〔20454H〕=1500H…420454HSS1500HCX…??………04H00H00HCS……E9H?50H00执行前:〔DS〕=1000H,〔SS〕=2000H,〔BX〕=300H,〔BP〕=400H,〔DI〕=60H,〔CX〕=1200H,〔DX〕=1500H,〔10366H〕=1400H,〔20468H〕=1800H例18MOVCX,6[BX+DI];〔〔DS〕×10H+〔BX〕+〔DI〕+6〕→CX执行后:〔CX〕=1400H例19MOVDX,8[BP+DI];〔〔SS〕×10H+〔BP〕+〔DI〕+8〕→DX执行后:〔DX〕=1800H…610366HDS1200HCX…0014………03H00H00HCS……E9H?60H00…820468HSS1500HDX…0018………04H00H00HCS……E9H?60H00指令寻址方式:与转移地址有关的寻址方式段内直接寻址段内间接寻址段间直接寻址段间间接寻址通常情况下,当BIU完成一次取指操作后,就自动地改变IP的内容以指向下一条指令的地址。使程序按预先存放在代码段中的指令的次序,由低地址到高地址顺序执行。如需要改变程序的执行顺序,需要安排具有控制程序转向的指令〔如无条件转移指令JMP〕,并按指令的要求修改IP和CS的内容,从而将程序转移到指令所指定的目标地址去。一条指令入口地址的表示形式为CS:IP。根据CS和IP的内容,指令寻址方式可分为以下四种:段内直接,段内间接,段间直接,段间间接。无条件转移指令和子程序调用指令可以使用四种寻址方式中的任何一种,而条件转移指令只能使用段内直接寻址方式,且位移量为8位。1、段内直接寻址:JMP,CALL,条件转移指令转移指令语句与该指令执行后将跳转到的转向指令语句在同一代码段内,转向指令的有效地址在转移指令语句中直接给出,常用的是标号形式。实质:CS的值不变,IP的值改变,转移指令中符号地址的值即为转向的有效地址,类似于数据寻址方式中的直接寻址。无条件转移语句JMP<指令入口地址CS:IP>
其中段内跳转CS可以省略。段内直接寻址转移指令JMP<标号>
例1
JMPLABELJMPNEARPTRADDR1例2JMPSHORTADDR2
CODE1SEGMENT……
JMPNEXT……NEXT:…………CODE1ENDSNEXT是该指令执行后将跳转到的转向指令语句的符号地址。NEARPTR:位移量为16位。SHORT:位移量为8位。转移地址:〔IP〕+位移量。相对于当前IP值的位移量。无条件绝对转移:JMP<标号>无条件相对转移:JMPNEARPTRADDR1JMPSHORTADDR2datasegmentmessdb'i:$'letterdw?dataendscodesegmentassumecs:code,ds:datastart:movax,datamovds,axleadx,messjmpnextmovah,09int21hnext:movah,4chint21hcodeendsendstart反汇编命令U[<地址>]|[<范围>]2、段内间接寻址:JMP,CALL转移指令语句与该指令执行后将跳转到的转向指令语句在同一代码段内,转向指令的有效地址在转移指令语句中间接给出,常用的是一个存放器或是一个存储单元。实质:CS的值不变,IP的值改变,转向指令的有效地址存储在存放器或存储单元中。这个存放器或存储单元的内容可以用数据寻址方式中除立即寻址方式以外的任何一种寻址方式取得。无条件转移语句JMP<指令入口地址CS:IP>其中段内跳转CS可以省略。段内间接寻址转移指令JMP<除立即数以外的任何一种寻址方式>例3假设〔DS〕=2000H,〔BX〕=1256H,〔SI〕=528FH,位移量=20A1H,〔232F7H〕=3280H,〔264E5H〕=2450H。那么指令JMPBX执行后〔IP〕=1256H。
检查和修改存放器内容命令R[<存放器名>]|[<F>]汇编命令A[=<地址>]跟踪命令T[=<地址>][<n>]例4假设〔DS〕=2000H,〔BX〕=1256H,〔SI〕=528FH,位移量=20A1H,〔232F7H〕=3280H,〔264E5H〕=2450H。那么指令JMPWORDPTRTABLE[BX]JMPWORDPTR[BX+TABLE]执行后〔IP〕=〔〔DS〕×10H+〔BX〕+位移量〕=〔20000H+1256H+20A1H〕=〔232F7H〕=3280H跟踪命令T[=<地址>][<n>]∵〔BX〕=0000,〔15901H〕=0000H∴〔IP〕=〔〔DS〕×10H+〔BX〕+位移量〕=〔13860H+0000H+20A1H〕=〔15901H〕=0000H例4假设〔DS〕=2000H,〔BX〕=1256H,〔SI〕=528FH,位移量=20A1H,〔232F7H〕=3280H,〔264E5H〕=2450H。那么指令JMPWORDPTRTABLE[BX]JMPWORDPTR[BX+TABLE]执行后〔IP〕=〔〔DS〕×10H+〔BX〕+位移量〕=〔20000H+1256H+20A1H〕=〔232F7H〕=3280H∵〔15901H〕=0000H∴〔IP〕=〔〔DS〕×10H+〔BX〕+位移量〕=〔13860H+1256H+20A1H〕=〔16B57H〕=0000H例5假设〔DS〕=2000H,〔BX〕=1256H,〔SI〕=528FH,位移量=20A1H,〔232F7H〕=3280H,〔264E5H〕=2450H。那么指令JMPWORDPTR[BX][SI]JMPWORDPTR[BX+SI]执行后〔IP〕=〔〔DS〕×10H+〔BX〕+〔SI〕〕=〔20000H+1256H+528FH〕=〔264E5H〕=2450H
∵〔BX〕=0000,〔SI〕=0000∴〔IP〕=〔〔DS〕×10H+〔BX〕+〔SI〕〕=〔13860H+0000H+0000H〕=〔13860H〕=20CDH3、段间直接寻址:JMP,CALL转移指令语句与该指令执行后将跳转到的转向指令语句在不同一代码段内,转向指令的有效地址在转移指令语句中直接给出,常用的是一个标号。实质:CS的值改变,IP的值改变,用段地址取代CS存放器的内容,用转移指令中指定的偏移地址取代IP存放器的内容。无条件转移语句JMP<指令入口地址CS:IP>其中段内跳转CS可以省略。段间直接寻址转移指令JMPFARPTR<标号>例6CALLSUB_NAME例7CALLSORT其中,SORT是一个排序子程序名。CODE1SEGMENT……
JMPFARPTRNEXT……CODE1ENDSCODE2SEGMENTNEXT:…………CODE2ENDS4、段间间接寻址:JMP,CALL转移指令语句与该指令执行后将跳转到的转向指令语句在不同一代码段内,转向指令的段地址和偏移地址也被存放在存储器中间接提供。实质:CS的值改变,IP的值改变,用存储器中的相继两个字单元的内容来取代IP和CS存放器中的原始内容。存储单元的地址由转移指令指定,可以通过数据寻址方式中存储器寻址〔除立即寻址方式和存放器寻址方式之外的任何一种寻址方式〕取得。无条件转移语句JMP<指令入口地址CS:IP>其中段内跳转CS可以省略。段间直接寻址转移指令JMPFARPTR<存储器寻址>例8JMPFARPTRX[R]例9假设〔DS〕=2000H,〔BX〕=1000H,TABLE=200H,〔DS:1200H〕=11223344H,〔264E5H〕=2450H。那么指令JMPFARPTRTABLE[BX]执行后CS:IP的内容为4433:2211。
∵〔21200H〕=0000H∴〔IP〕=〔〔DS〕×10H+〔BX〕+偏移量〕=〔20000H+1000H+200H〕=〔21200H〕=0000H1、段内直接寻址JMP<标号>2、段内间接寻址JMP<除立即数以外的任何一种寻址方式>3、段间直接寻址JMPFARPTR<标号>4、段间间接寻址JMPFARPTR<存储器寻址>总结STACKSEGMENTSTACKDB200DUP(0)STACKENDSDATA1SEGMENTBUF1DB20H,21H,22H,23H,24H,25H,26H,27H,28H,29HDATA1ENDSDATA2SEGMENTBUF2DB10DUP(0)DATA2ENDSCODESEGMENT
ASSUMECS:CODE,DS:DATA1,ES:DATA2,SS:STACKSTART:MOVAX,DATA1MOVDS,AXMOVAX,DATA2MOVES,AXMOVSI,OFFSETBUF1MOVDI,OFFSETBUF2MOVCX,10NEXT:MOVAL,DS:[SI]MOVES:[DI],ALINCSIINCDIDECCX
JNZNEXTEXIT:MOVAH,4CHINT21HCODEENDSENDSTART综合例题:例1编程实现把BUF1存储空间的内容移动到BUF2存储空间中去。DS…20H21H22H23H24H25H26H27H28H……29HSIES………DI指定了段与段存放器之间的对应关系OFFSET运算符:对紧跟其后的变量取偏移地址DATA1SEGMENT
BUF1DB20H,21H,22H,23H,24H,25H,26H,27H,28H,29HDATA1ENDSDATA2SEGMENT
BUF2DB10DUP(0)DATA2ENDSSTART:MOVAX,DATA1MOVDS,AXMOVAX,DATA2MOVES,AXMOVSI,OFFSET
BUF1MOVDI,OFFSETBUF2MOVCX,10NEXT:MOVAL,DS:[SI]MOVES:[DI],ALINCSIINCDIDECCX
JNZNEXTEXIT:MOVAH,4CHINC21H标号符号地址变量符号地址跨段前缀跨段前缀调试程序:
①编译、②连接、③运行
④
DEBUG命令的使用
-u在两台电脑上运行同一个程序第一步:第三步:第四步:7+7×10+2第二步:第五步:第六步:DATASEGMENT
BUF1DB20H,21H,22H,23H,24H,25H,26H,27H,28H,29H
BUF2DB10DUP(0)DATAENDSCODESEGMENT
ASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVSI,0MOVCX,10NEXT:MOVAL,BUF1[SI]MOVBUF2[SI],ALINCSIDECCX
JNZNEXTEXIT:MOVAH,4CHINT21HCODEENDSENDSTART例1’…DS…20H21H22H23H24H25H26H27H28H29HSIBUF1[SI]BUF2[SI]STACKSEGMENTSTACKDB200DUP(0)STACKENDSDATA1SEGMENTBUF1DB20H,21H,22H,23H,24H,25H,26H,27H,28H,29HDATA1ENDSDATA2SEGMENTBUF2DB10DUP(0)DATA2ENDSCODESEGMENT
ASSUMECS:CODE,DS:DATA1,ES:DATA2,SS:STACKSTART:MOVAX,DATA1MOVDS,AXMOVAX,DATA2MOVES,AXMOVSI,OFFSETBUF1MOVDI,OFFSETBUF2MOVCX,10NEXT:MOVAL,DS:[SI]MOVES:[DI],ALINCSIINCDIDECCX
JNZNEXTEXIT:MOVAH,4CHINC21HCODEENDSENDSTARTDATASEGMENT
BUF1DB20H,21H,22H,23H,24H,25H,26H,27H,28H,29H
BUF2DB10DUP(0)DATAENDSCODESEGMENT
ASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVSI,0MOVCX,10NEXT:MOVAL,BUF1[SI]MOVBUF2[SI],ALINCSIDECCX
JNZNEXTEXIT:MOVAH,4CHINT21HCODEENDSENDSTART例1’例1调试程序3.27的修改程序:
①编译、②连接、③运行
④
DEBUG命令的使用
-uDATASEGMENT
BUF1DB20H,21H,22H,23H,24H,25H,26H,27H,28H,29H
BUF2DB10DUP(0)DATAENDS标号符号地址变量符号地址START:MOVAX,DATAMOVDS,AXMOVSI,0MOVCX,10NEXT:MOVAL,BUF1[SI]MOVBUF2[SI],ALINCSIDECCX
JNZNEXTEXIT:MOVAH,4CHINT21H第一步:第三步:第四步:4+5×10+2第二步:第五步:第六步:.MODELSMALL.386.DATADATA1DQ1111111111111111HDATA2DQ2222222222222222HDATA3DQ?.CODESTART:MOVEAX,@DATAMOVDS,EAXCLCLEAESI,DATA1LEAEDI,DATA2LEAEBX,DATA3MOVECX,2BACK:MOVEAX,[ESI]
ADCEAX,[EDI]MOV[EBX],EAXPUSHFADDESI,4ADDEDI,4ADDEBX,4
LOOPBACKMOVEAX,4C00HINT21HENDSTART综合例题:例2用32位寻址方式编程,求两个4字长数据之和。其中,初值存放在DATA1、DATA2存储单元中,结果存放在DATA3存储单元中。…64位DSESIEDIEBX11H11H11H11H11H11H11H11H…22H22H22H22H22H22H22H22H…〔1〕ECX-1→ECX〔2〕假设ECX不为0,那么转移32位加法小汇编程序ASM例2’STACKSEGMENTSTACKDB200DUP(0)STACKENDSDATASEGMENTDATA1DQ1111111111111111HDATA2DQ2222222222222222HDATA3DQ?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVEAX,DATAMOVDS,EAXCLCLEAESI,DATA1LEAEDI,DATA2LEAEBX,DATA3MOVECX,2BACK:MOVEAX,[ESI]
ADCEAX,[EDI]MOV[EBX],EAXPUSHFADDESI,4ADDEDI,4ADDEBX,4
LOOPBACKMOVEAX,4C00HINT21HCODEENDSENDSTART宏汇编程序MASM.MODELSMALL.386.DATADATA1DQ1111111111111111HDATA2DQ2222222222222222HDATA3DQ?.CODESTART:MOVEAX,@DATAMOVDS,EAXCLCLEAESI,DATA1LEAEDI,DATA2LEAEBX,DATA3MOVECX,2BACK:MOVEAX,[ESI]
ADCEAX,[EDI]MOV[EBX],EAXPUSHFADDESI,4ADDEDI,4ADDEBX,4
LOOPBACKMOVEAX,4C00HINT21HENDSTART小汇编程序ASMSTACKSEGMENTSTACKDB200DUP(0)STACKENDSDATASEGMENTDATA2DQ2222222222222222HDATA3DQ?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXCLCLEASI,DATA1LEADI,DATA2LEABX,DATA3MOVCX,4BACK:MOVAX,[SI]ADCAX,[DI]MOV[BX],AXPUSHFADDSI,2ADDDI,2
ADDBX,2LOOPBACKMOVAX,4CHINT21HCODEENDSENDSTARTSTACKSEGMENTSTACKDB200DUP(0)STACKENDSDATA
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高中心态和自律的课件
- 高中化学氯气课件
- 高中光的色散课件
- 高三最后一课课件
- 企业内部知识产权保护与竞业禁止合同范本
- 跨境电商融资合同续签与物流仓储服务协议
- 带有户外景观设计权的二手房买卖合同
- 公寓楼日常保洁托管合同
- 高中地理湘教版(2019)必修2笔记 知识梳理清单
- 如何引导初高中生正确看待追星文化
- 煤矿安全规程2025版解读
- 尿培养的采集
- 东航空乘英语考试题目及答案
- 《三级工学一体化师资培训》课件-第四课:教学活动策划
- 2025年广东省中考英语试卷深度评析及2026年备考策略
- 2025-2026秋中小学升旗仪式演讲稿:(第3周)积跬步养习惯向未来
- 2025秋苏教版(2024)小学科学二年级上册(全册)课时练习及答案(附目录)
- 2025年新疆投资发展集团有限责任公司人员招聘笔试备考题库及答案详解(新)
- 中望CAD机械版使用手册
- 2024年9月28日安徽省地市级遴选笔试真题及解析
- 工程常见质量通病防治课件
评论
0/150
提交评论