(微机原理与接口技术)chapter04数据传送指令_第1页
(微机原理与接口技术)chapter04数据传送指令_第2页
(微机原理与接口技术)chapter04数据传送指令_第3页
(微机原理与接口技术)chapter04数据传送指令_第4页
(微机原理与接口技术)chapter04数据传送指令_第5页
已阅读5页,还剩124页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、( (微机原理与接口技术微机原理与接口技术)chapter04)chapter04数数据传送指令据传送指令7结论结论在带有前缀的指令中,前缀把存放器及操作在带有前缀的指令中,前缀把存放器及操作数地址的长度从数地址的长度从16位转换到位转换到32位,或是从位,或是从32位转换到位转换到16位位16位指令模式用位指令模式用8位及位及16位存放器和寻址方式,位存放器和寻址方式,而而32位指令模式使用位指令模式使用8位及位及32位存放器和寻位存放器和寻址方式址方式前缀可超越这些默认值,因此前缀可超越这些默认值,因此32位指令模式位指令模式可以使用可以使用16位模式,而位模式,而16位存放器可以用于位存

2、放器可以用于32模式模式8操作码操作码选择微处理器执行的操作加、减、传送,等等选择微处理器执行的操作加、减、传送,等等多数机器语言指令的操作码长为多数机器语言指令的操作码长为1或或2字节字节9多数机器语言指令的第一个字节多数机器语言指令的第一个字节10第一个字节的前第一个字节的前6位是操作码位是操作码如果方向位如果方向位D=1,数据从位于指令第二个字节的数据从位于指令第二个字节的 R/M 字段流向存放器字段流向存放器REG字段。如果操作码字段。如果操作码 D=0,数据从,数据从REG 字段流向字段流向R/M 字段字段W 指示数据长度:如果指示数据长度:如果W=1,数据的长度是字或,数据的长度是

3、字或是双字,如果是双字,如果W=0,数据的长度是字节,数据的长度是字节在在80386及更高档型号微处理器中,当及更高档型号微处理器中,当W=1时指示时指示字或者双字。指令模式和字或者双字。指令模式和 存放器长度前缀存放器长度前缀 (66H) 确确定定W表示字还是双字表示字还是双字11多数机器语言指令的第二个字节多数机器语言指令的第二个字节12MOD 字段字段: 规定指令的寻址方式。规定指令的寻址方式。MOD字段选择字段选择寻址类型及所选的类型是否有位移量寻址类型及所选的类型是否有位移量如果如果MOD =11,它选择存放器寻址模式。存放器寻它选择存放器寻址模式。存放器寻址用址用R/M字段指定一个

4、存放器而不是存储单元字段指定一个存放器而不是存储单元如果如果MOD字段内容是字段内容是00, 01或或10, R/M字段选择数字段选择数据存储器寻址方式之一据存储器寻址方式之一MOD =00, 没有位移量没有位移量MOD =01, 8位符号扩展的位移量位符号扩展的位移量MOD =10, 16位移量位移量 (8086-80286)或或32位移量位移量80386 及更高档型号的微处理器及更高档型号的微处理器)1314要点要点当微处理器执行当微处理器执行16位指令模式时,将所有位指令模式时,将所有8位的位位的位移量符号扩展成移量符号扩展成16位的位移量位的位移量当当80386及更高档型号微处理器执行

5、及更高档型号微处理器执行32位指令模式位指令模式时,将所有时,将所有8位的位移量符号扩展成位的位移量符号扩展成32位的位移量位的位移量15例例 1MOV AL, DI 指令是没有位移量指令是没有位移量The MOV AL, DI+2 指令用指令用8位的位移量位的位移量 (+2)The MOV AL, DI+1000H 指令用指令用16位的位移量位的位移量 (+1000H)8位的位移量是位的位移量是00H-7FH(正的正的),扩展成为,扩展成为16位的位的0000-007FH 。8位的位移量是位的位移量是80H-FFH(负的负的) ,扩,扩展成为展成为16位的位的FF80-FFFFH16存放器分

6、配存放器分配17例例22字节指令字节指令8BECH由于第一个字节既不是由于第一个字节既不是67H(操作数地址长度操作数地址长度超越前缀超越前缀)也不是也不是66H (存放器长度超越前存放器长度超越前缀缀) ,因此第一个字节是操作码,因此第一个字节是操作码假定微处理器按假定微处理器按16位指令模式操作位指令模式操作1819例例 33字节指令字节指令668BE8H假定微处理器按假定微处理器按16位指令模式操作位指令模式操作第一个字节的第一个字节的66H是存放器长度超越前缀,为是存放器长度超越前缀,为了在了在16位指令模式下选择位指令模式下选择32位存放器位存放器指令的操作码是指令的操作码是MOV源

7、操作数是源操作数是EAX目标操作数是目标操作数是EBP这条指令是这条指令是MOV EBP, EAX20要点要点在在80386和更高档型号的微处理器中,如果按和更高档型号的微处理器中,如果按32位指令模式操作,由于存放器长度超越位指令模式操作,由于存放器长度超越前缀选择了前缀选择了16位存放器,这条指令就变成位存放器,这条指令就变成了了MOV BP, AX 如果将如果将. 386开关放在开关放在.MODEL语句前面,那语句前面,那么选择么选择32位模式位模式如果将如果将. 386开关放在开关放在.MODEL语句后面,那语句后面,那么选择么选择16位模式位模式21R/M 存储器寻址存储器寻址如果如

8、果MOD字段的内容是字段的内容是00, 01或或10,那么,那么R/M按新按新的意义理解的意义理解2223例例 42字节指令字节指令8A15H假定微处理器按假定微处理器按16位指令模式操作位指令模式操作操作码是操作码是100010, MOVD= 1 (从从R/M传送到传送到REG)W= 0 (字节字节)MOD= 00 (没有位移量没有位移量)REG= 010 (DL)R/M =101 (DI)MOV DL, DI2425例例 5如果指令变成如果指令变成MOV DL, DI+1,MOD 字段变字段变成成01,构成,构成8位的位移量位的位移量现在指令变成了现在指令变成了8A5501H,而不是,而不

9、是 8A15H8位的位移量加到前两个字节后面,因此构成位的位移量加到前两个字节后面,因此构成了三字节指令而不是两字节指令了三字节指令而不是两字节指令此外,指令此外,指令MOV DL, DI+1000H,那么机器语那么机器语言形式变成言形式变成8A950010H 26特殊寻址方式特殊寻址方式在在16位指令模式下,只用位移量寻址存储器的数据,位指令模式下,只用位移量寻址存储器的数据,如如MOV 1000, DL和和MOV NUMB, DL当指令只有一个位移量时,当指令只有一个位移量时, MOD= 00和和R/M =110在机器语言中,在机器语言中,BP寻址方式没有位移量寻址方式没有位移量 汇编程序

10、就使用一个汇编程序就使用一个8位偏移量位偏移量(MOD=01)00H27例例 6MOV 1000H, DL28例例 7MOV BP, DL2932位寻址方式位寻址方式80386和更高档型号微处理器的和更高档型号微处理器的32位寻址方式可通位寻址方式可通过过32指令模式或者用带地址长度前缀指令模式或者用带地址长度前缀67H的的16位指位指令模式运行机制获得令模式运行机制获得指令指令MOV EAX, EBX+4*ECX 的编码是的编码是 67668B048BH。这条指令出现了地址了长度。这条指令出现了地址了长度67H和存放器长度和存放器长度66H两个超越前缀。这意味着两个超越前缀。这意味着8038

11、6和更高档型号微处理器按和更高档型号微处理器按16位模式操作时,位模式操作时,指令编码是指令编码是67668B048BH30立即指令立即指令例例 8MOV WORD PTR BX+1000H, 1234H6字节的指令用两个字节作为操作码,字节的指令用两个字节作为操作码,W,MOD和和 R/M字段。字段。6个字节中的另外两个字节是有效数据个字节中的另外两个字节是有效数据1234H,还有两个字节是位移量,还有两个字节是位移量1000H3132段存放器段存放器MOV指令指令一组专门的存放器位一组专门的存放器位(REG字段字段)选择段存放器选择段存放器段存放器可以与任意段存放器可以与任意16位存放器或

12、位存放器或16位存储单元之位存储单元之间传送数据间传送数据这种这种MOV指令的操作码不同于以前的指令的操作码不同于以前的MOV 指令指令指令系统中不存在用立即寻址方式的段存放器指令系统中不存在用立即寻址方式的段存放器 MOV指令指令33例例 9MOV BX, CS有关机器语言的内容,就讲解到此。以后要用助记符有关机器语言的内容,就讲解到此。以后要用助记符汇编语言来汇编语言来编写程序。编写程序。34PUSH/POP指令指令微处理器有微处理器有6种形式的种形式的PUSH和和POP指令形式:存放指令形式:存放器、存储器、立即数、段存放器、标志存放器及全器、存储器、立即数、段存放器、标志存放器及全部存

13、放器部存放器在在32位处理器中,还包含位处理器中,还包含32位存放器和位存放器和 32位立即位立即数数35PUSH36POP37初始化堆栈初始化堆栈初始化堆栈时,应当加载堆栈段存放器和堆栈指针初始化堆栈时,应当加载堆栈段存放器和堆栈指针存放器存放器有两种定义堆栈段的方法有两种定义堆栈段的方法38装入有效地址装入有效地址 指令指令39LEA指令指令把由操作数字段指定的数据的偏移地址装入把由操作数字段指定的数据的偏移地址装入16位或位或32位存放器位存放器比较比较LEA和和MOV指令,很明显指令,很明显LEA BX, DI指令是指令是将将DI指示的偏移地址装入指示的偏移地址装入BX,而,而MOV

14、BX, DI 那那么是将由么是将由DI寻址的存储单元内的数据装入存放器寻址的存储单元内的数据装入存放器BXOffset伪指令:如果操作数是位移量,那么伪指令:如果操作数是位移量,那么OFFSET伪指令实现的功能与伪指令实现的功能与LEA指令相同指令相同MOV BX, OFFSET LIST实现的功能与实现的功能与LEA BX, LIST相同相同40例例 10给出一个短程序,将给出一个短程序,将DATA1DATA1的地址装入的地址装入SISI,将,将DATA2DATA2的地址装入的地址装入DIDI,然后交换这些存储单元的内容,然后交换这些存储单元的内容.MODEL SMALLDW 2000H.D

15、ATA.STARTUPLEA SI, DATA1MOV DI, OFFSET DATA2.EXITEND00000017 BE 0000 R001A BF 0002 R;select SMALL model;start of DATA segment;exit to DOS;end of file;define DATA1.CODE;start of CODE segment001D 8B 1C001F 8B 0D0000 2000DATA10000;start of programMOV CX, DIMOV BX, SI;address DATA1 with SI;exchange DATA

16、1 with DATA2DW 3000H0002 3000DATA2;define DATA2;address DATA2 with DIMOV DI, BXMOV SI, CX0023 89 1D0021 89 0C41LDS, LES, LFS, LGS和和LSS指令指令把偏移地址装入任何把偏移地址装入任何16位或位或32位存放器,并且把段位存放器,并且把段地址装入地址装入DS, ES, FS, GS或或SS段存放器段存放器这些指令可以用任何寻址方式访问这些指令可以用任何寻址方式访问32位或位或48位存储位存储区,该区包含段地址和偏移地址区,该区包含段地址和偏移地址这些指令不能使用存放器寻

17、址方式这些指令不能使用存放器寻址方式 (MOD= 11)LFS, LFS和和LSS只用于只用于80386及更高档型号的微处及更高档型号的微处理器理器42例例 11LDS BX, DI这条指令将数据段中由这条指令将数据段中由DI寻址的寻址的32位数传送位数传送到到BX和和DS存放器存放器从存储器获得新的远地址从存储器获得新的远地址偏移地址在先,段地址在后偏移地址在先,段地址在后4344要点要点远地址可以由汇编程序存入存储器远地址可以由汇编程序存入存储器ADDR DD FAR PTR FROG指令将指令将FROG的的偏移地址和段地址存入偏移地址和段地址存入ADDR处开始的处开始的32位位存储区中存

18、储区中DD伪指令通知汇编程序在存储器地址伪指令通知汇编程序在存储器地址ADDR处存入处存入32位的双字位的双字在在80386和更高档型号的微处理器中,和更高档型号的微处理器中,LDS EBX, DI 指令将数据段中由指令将数据段中由DI寻址的存储寻址的存储区的区的4个字节装入个字节装入EBX,然后将这,然后将这4个字节个字节后面的字装入后面的字装入DS存放器存放器45例例 12LSS 指令指令保存旧的堆栈区地址后,建立新堆栈区的短程序保存旧的堆栈区地址后,建立新堆栈区的短程序为了禁止中断,必须包含为了禁止中断,必须包含CLI (禁止中断禁止中断)和和STI (允允许中断许中断) 指令指令46.

19、MODEL SMALLDD ?.DATA.STARTUP0000;select SMALL model;start of DATA segment;old stack address.CODE;start of CODE segment0000 00000000SADDR0000;start of programDW 1000H DUP (?)0004 1000 SAREA;new stack area.386;select 8038600002004 = 2004STOPEQU THIS WORD;define top of new stack47MOV WORD PTR SADDR, AX

20、MOV AX, SS.EXITEND0011 8B C40013 A3 0002 R;exit to DOS;end of file0016 8C D00018 A3 0002 RMOV AX, DSMOV WORD PTR SADDR+2, AX;save old SP;load new SSMOV AX, OFFSET STOPMOV SS, AX001D 8E D0001B 8C D8;disable interrupt0010 FACLI001F B8 2004 R0022 8B E00024 FB0025 8B C00027 8B C00029 0F B2 26 0000 RMOV

21、AX, SPMOV SP, AXSTIMOV AX, AXMOV AX, AXLSS SP, SADDR;save old SS;load new SP;enable interrupt;do dummy instruction;load old SS and SP48数据串传送数据串传送有有5条数据串传送指令条数据串传送指令: LODS, STOS, MOVS, INS和和OUTS字节,字或双字数据字节,字或双字数据D标志位和标志位和DI及及SI存放器对串指令的作用存放器对串指令的作用49DI和和SIDI 偏移地址用于访问附加段中的数据偏移地址用于访问附加段中的数据SI 偏移地址默认用于访问

22、数据段中的数据偏移地址默认用于访问数据段中的数据SI 的段分配可以通过段超越前缀来改变的段分配可以通过段超越前缀来改变在在MOVS 指令中,可以将指令中,可以将64K的数据从存储器的一的数据从存储器的一个段传送到另一个段个段传送到另一个段50LODS指令指令将存储在数据段并用将存储在数据段并用SI存放器寻址的数据装入存放器寻址的数据装入AL, AX或或EAX51例例 13执行执行LODSW指令,假定标志指令,假定标志D= 0, SI= 1000H和和 DS= 1000H将存储在存储器地址将存储在存储器地址11000H和和11001H 的的16位数传位数传送到送到AX5253STOS指令指令将将

23、AL, AX或或EAX 存储在附加段内由存储在附加段内由DI存放器寻址存放器寻址的存储单元的存储单元54例例 14带有带有REP的的STOS指令指令 : 重复前缀可以加到除重复前缀可以加到除了了LODS 指令以外的任何串数据传送指令上指令以外的任何串数据传送指令上REP前缀使得每次执行串指令后前缀使得每次执行串指令后CX减减1任务任务: 假定用假定用STOSW指令去除视频字符显示指令去除视频字符显示器器视频字符显示器开始访问于视频字符显示器开始访问于B800: 0000在共在共25行,每行行,每行80个字符的显示器上,每个个字符的显示器上,每个字符位置安排两个字节。第一个字节包含字符位置安排两

24、个字节。第一个字节包含ASCII字符,第二个字节包含颜色和字符的字符,第二个字节包含颜色和字符的属性属性要点要点通常运算的运算符通常运算的运算符: +, -, *, /, MOD, AND, OR和和 NOT 可以应用在汇编语言程序的表达式可以应用在汇编语言程序的表达式中中55解答解答AL 是空格的是空格的ASCII码码(20H),而,而AH中的颜色代码中的颜色代码表示黑色背景中的白色字符表示黑色背景中的白色字符 (07H).MODEL TINY.STARTUPCLDMOV AX,0B800H.EXITEND0100 FC0101 B8 B800;select TINY model;addre

25、ss segment B800;exit to DOS;end of file.CODE;start of CODE segment0014 8E C00106 BF 00000000;start of programMOV DI,0MOV ES,AX;address increment mode;address offset 00000109 B9 07D0010C B8 0720010F f3/ABMOV CX,25*80MOV AX,0720HREP STOSW;load count;load data;clear the screen56MOVS指令指令将数据从一个存储单元传送到另一个

26、存储单元将数据从一个存储单元传送到另一个存储单元唯一允许的存储器到存储器的传送指令唯一允许的存储器到存储器的传送指令从数据段内由从数据段内由SI寻址的存储单元把字节、字和双字寻址的存储单元把字节、字和双字传送到附加段内由传送到附加段内由DI寻址的存储单元寻址的存储单元像其他串指令一样,根据方向标志的指示指针增量像其他串指令一样,根据方向标志的指示指针增量或减量或减量只能对源操作数只能对源操作数SI通常位于数据段使用超通常位于数据段使用超越前缀越前缀5758例例 15视频显示器需要上卷一行视频显示器需要上卷一行用用DS:SI存放器组合寻址在存放器组合寻址在B800:0000 开始的开始的视频显示

27、器文本区,用视频显示器文本区,用ES:DI 组合寻址组合寻址B800:00A0开始的单元开始的单元然后执行然后执行REP MOVSW指令指令24*80次,实现向次,实现向上滚一行上滚一行用黑色背景中存储空格来去除最后一行用黑色背景中存储空格来去除最后一行5960void TransferBlocks(int BlockSize , int * BlockA , int * BlockB) _asmpush espush edipush esipush dspop esmov esi , BlockAmov edi . BlockBmov ecx , BlockSizerep movsbpop

28、esipop edipop es void TransferBlocks(int BlockSize , int * BlockA , int * BlockB)for (int a=0 ; a BlockSize ; a+)BlockA=BlockB+;BlockA+;61for (int a = 0;a BlockSize; a+)00000000 push ebp 00000001 mov ebp,esp 00000003 sub esp,0Ch 00000006 mov dword ptr ebp-4,ecx 00000009 mov dword ptr ebp-8,edx 00000

29、00c cmp dword ptr ds:00A23144h,0 00000013 je 0000001A 00000015 call 75D94E93 0000001a xor edx,edx 0000001c mov dword ptr ebp-0Ch,edx 0000001f xor edx,edx 00000021 mov dword ptr ebp-0Ch,edx 00000024 nop 00000025 jmp 0000002A 00000027 inc dword ptr ebp-0Ch 0000002a mov eax,dword ptr ebp-0Ch 0000002d c

30、mp eax,dword ptr ebp-4 00000030 jge 00000043 BlockA=BlockB+;00000032 mov eax,dword ptr ebp+8 00000035 mov dword ptr ebp-8,eax 00000038 add dword ptr ebp+8,4 BlockA+;0000003c add dword ptr ebp-8,4 00000040 nop 00000041 jmp 00000027 00000043 nop 00000044 mov esp,ebp 00000046 pop ebp 00000047 ret 4 62I

31、NS指令不能用于指令不能用于8086/8088处理器处理器从从I/O设备把字节、字或双字数据传送到附加段内设备把字节、字或双字数据传送到附加段内由由DI寻址的存储单元寻址的存储单元I/O地址存放在地址存放在DX存放器存放器磁盘驱动器被认为是计算机系统中的磁盘驱动器被认为是计算机系统中的I/O设备设备这条指令将外部这条指令将外部I/O设备的数据块直接输入到存储设备的数据块直接输入到存储器器重读使用重读使用REP前缀前缀6364例例 16给出一个指令序列,从地址位给出一个指令序列,从地址位03ACH的的I/O设备输设备输入入50个字节数据附加段的个字节数据附加段的LISTS存储器数组中,此存储器数

32、组中,此时假定随时都可以使用来自时假定随时都可以使用来自I/O设备的数据设备的数据MOV DI, OFFSET LISTSMOV DX, 3ACH00000 BF 0000 R0003 BA 03AC0007 B9 0032000A F3/6C;Using the REP INSB to input data to a memory arrayREP INSBMOV CX, 50;address array;load count;CLD0006 FC;input data;address I/O;auto-increment65OUTS指令不能用于指令不能用于8086/8088处理器处理器从数

33、据段把由从数据段把由SI寻址的存储单元的字节、字或双字寻址的存储单元的字节、字或双字传送到传送到I/O设备设备I/O 设备由设备由DX存放器内容寻址存放器内容寻址磁盘驱动器被认为是计算机系统中的磁盘驱动器被认为是计算机系统中的I/O设备设备这条指令将来自存储器的数据块传送到外部这条指令将来自存储器的数据块传送到外部I/O设设备中备中重读使用重读使用REP前缀前缀6667例例 17从数据段的存储器数组从数据段的存储器数组(ARRAY)把把100个字节数传送个字节数传送到地址为到地址为3ACH的的I/O设备。此处假定设备。此处假定I/O设备总是把设备总是把数据准备好了数据准备好了MOV SI, O

34、FFSET ARRAYMOV DX, 3ACH00000 BE 0064 R0003 BA 03AC0007 B9 0064000A F3/6E;Using the REP OUTSB to output data from a memory arrayREP OUTSBMOV CX, 100;address array;load count;CLD0006 FC;output data;address I/O;auto-increment68其他数据传送指令其他数据传送指令XCHG, LAHF, SAHF, XLAT, IN, OUT, BSWAP, MOVSX, MOVZX和和CMOV69

35、XCHG指令指令将存放器的内容与任何其他存放器或存储单元的内将存放器的内容与任何其他存放器或存储单元的内容交换容交换不能实现段存放器之间的交换,或者存储器和存储不能实现段存放器之间的交换,或者存储器和存储器之间的数据交换器之间的数据交换可以交换字节、字或双字长度,并且可以使用第可以交换字节、字或双字长度,并且可以使用第3章中讨论的除了立即寻址以外的任何寻址模式章中讨论的除了立即寻址以外的任何寻址模式70LAHF和和SAHF指令指令现已很少使用现已很少使用LAHF指令把标志存放器最右边的指令把标志存放器最右边的8位传送到位传送到AH存放存放器器 SAHF指令把指令把AH存放器传送到标志存放器的最

36、右边的存放器传送到标志存放器的最右边的8位位71XLAT换码指令换码指令把把AL存放器中的内容转换成存储在存储器表中的数字,存放器中的内容转换成存储在存储器表中的数字,AL储存数据结果储存数据结果实现将一个代码转换为另一个代码实现将一个代码转换为另一个代码将将AL与与BX的内容相加,形成数据段内的存储器地址的内容相加,形成数据段内的存储器地址这是唯一一条把这是唯一一条把8位数字加到位数字加到16位数字上的指令位数字上的指令72例例 18假定假定7段段LED显示器编码查找表存放在存储器地址显示器编码查找表存放在存储器地址 TABLE处处把把AL中的中的BCD码数字转换成码数字转换成AL中的中的7

37、段码段码如果如果TABLE= 1000H, DS= 1000H, 初始化初始化AL= 05H (BCD码码5)转换以后转换以后AL= 6DH 737475IN和和OUT指令指令在在I/O设备与微处理器之间只能传送设备与微处理器之间只能传送AL, AX或或EAX 的内容的内容IN指令将外部指令将外部I/O设备的数据传送到设备的数据传送到 AL, AX或或 EAXOUT指令把指令把 AL, AX或或EAX的数据传送到外部的的数据传送到外部的I/O设备设备对于对于IN和和OUT指令,指令,I/O设备地址以两种形式存在:设备地址以两种形式存在:固定的端口固定的端口和和可变的端口可变的端口76固定端口固

38、定端口 寻址允许在寻址允许在AL, AX或或EAX 与使用与使用8位位I/O端口地址的设备之间传送数据,例如端口地址的设备之间传送数据,例如 IN AL, 6AH可变端口可变端口 寻址允许在寻址允许在AL, AX或或EAX与与16位端口地位端口地址之间传送数据,址之间传送数据,16位端口地址的数据存储在位端口地址的数据存储在DX存放器中存放器中在在I/O操作中,端口地址出现在地址总线操作中,端口地址出现在地址总线A0-A15上上对于对于8位固定端口的位固定端口的I/O指令,指令,8位端口地址用位端口地址用0扩展扩展成成16位地址位地址777879例例 19使使PC中的扬声器发声中的扬声器发声通

39、过访问通过访问I/O端口端口61H可以控制扬声器发声可以控制扬声器发声运用逻辑指令运用逻辑指令AND和和OR8081MOVSX和和MOVZX指令指令传送数据时,对数据进行符号扩展或者零扩展传送数据时,对数据进行符号扩展或者零扩展MOVSX 是传送及是传送及 符号扩展符号扩展指令指令 ,将,将8位有符号数位有符号数转换为转换为16位有符号数,或将位有符号数,或将16位有符号数转换为位有符号数转换为32位有符号数位有符号数MOVZX 是传送及是传送及 零扩展零扩展指令,将指令,将8位数字转换为位数字转换为16位数字,或将位数字,或将16位数字转换为位数字转换为32位数字位数字只出现在只出现在803

40、86Pentium4指令系统中指令系统中8283BSWAP指令指令只能用于只能用于80486和所有和所有Pentium微处理器微处理器这条指令将这条指令将32位存放器内的第一个字节与第四个字位存放器内的第一个字节与第四个字节交换,第二个字节与第三个字节交换节交换,第二个字节与第三个字节交换例如:设例如:设EAX=00112233H 执行执行 BSWAP EAX 后,后,EAX=33221100H 84CMOV指令指令是是Pentium Pro和和Pentium 4指令系统的新指令指令系统的新指令只有条件为真时,这些指令才传送数据只有条件为真时,这些指令才传送数据例如:例如: CMOVZ EDI

41、,EBX 这条指令的意思是,当标志位这条指令的意思是,当标志位Z=1是,那么执是,那么执行行 MOV EDI,EBX,如果执行这条指令时,标志,如果执行这条指令时,标志位位Z1,那么不执行这条指令。,那么不执行这条指令。8586段超越前缀段超越前缀允许程序偏离默认的段允许程序偏离默认的段87汇编程序详述汇编程序详述微处理器的汇编程序能够以两种方式使用:微处理器的汇编程序能够以两种方式使用:(1) 针对一种特定的汇编程序的模型针对一种特定的汇编程序的模型(2) 完整的段定义方式,可完全控制汇编的全过程,完整的段定义方式,可完全控制汇编的全过程,并且可用于所有的汇编程序并且可用于所有的汇编程序下面

42、给出了两种方法,说明怎样使用汇编程序组织下面给出了两种方法,说明怎样使用汇编程序组织程序的存储空间,也说明了用于汇编程序的一些非程序的存储空间,也说明了用于汇编程序的一些非常重要的伪指令的用法和作用。常重要的伪指令的用法和作用。88伪指令伪指令指示汇编程序应怎样去处理操作数或一段程序指示汇编程序应怎样去处理操作数或一段程序有些伪指令生成信息并将其存储到存储器中,而另有些伪指令生成信息并将其存储到存储器中,而另一些有其他用途一些有其他用途观察表观察表4-2189在存储器段中存储数据在存储器段中存储数据经常用经常用DB (定义字节定义字节), DW (定义字定义字), DD (定义双字定义双字)伪

43、伪指令指令90DB 1, 2, 3;hexadecimal;hexadecimal0000DATA1DW 12, 130005 F0DATA2;ASCII0006 000C 000D;define words000E 00000300LIST_SEGSEGMENTDB 45HDB ADB 11110000B0000 01 02 030003 450004 41DW LIST1DW 2345H000A 0200000C 2345DATA3DD 300HDD 2.123DD 3.34E+120012 4007DF3B0016 544269E1001A 00LISTADB ?;define byte

44、s;binary;symbolic;hexadecimal;real;real;reserve 1 byte例例 21一个存储器段,包括定义各种数据格式的伪指令一个存储器段,包括定义各种数据格式的伪指令91LIST_SEG ENDS001B 00ADW 100H DUP (0)0026 01000025 00LISTBDB 10 DUP (0)?ALING 2LISTC0000DD 22 DUP (?)0226 0016LIST_9?DB 100 DUP (6)027E 0064SIXES0602E2;reserve 10 bytes;set word boundary;word array;

45、doubleword array;byte array92ASSUME, EQU和和ORGASSUME 语句通知汇编程序为代码段、数据段、语句通知汇编程序为代码段、数据段、附加段及堆栈段选择了什么名字附加段及堆栈段选择了什么名字EQU 伪指令把一个数值,伪指令把一个数值, ASCII字符或者标号赋字符或者标号赋给另一个标号给另一个标号ORG 语句给数据或代码的原点分配一个绝对的偏语句给数据或代码的原点分配一个绝对的偏移地址移地址93例例 2294例例 2395PROC和和ENDP指明过程的开始和结束指明过程的开始和结束PROC 伪指令的后面必须跟随伪指令的后面必须跟随NEAR和和FAR96要点

46、要点如果使用的如果使用的Microsoft的版汇编程序,的版汇编程序, PROC伪指令可自动保存过程中使用的任何存储伪指令可自动保存过程中使用的任何存储器器USES语句指示过程使用的存放器,使汇编程语句指示过程使用的存放器,使汇编程序在过程开始前就能自动保存它们,而在序在过程开始前就能自动保存它们,而在过程用过程用RET伪指令结束前恢复这些存放器伪指令结束前恢复这些存放器97例例 2598存储器组织存储器组织汇编程序使用两种根本格式开发软件:汇编程序使用两种根本格式开发软件:(1) 一种使用模型一种使用模型(2) 另一种使用完整的段定义另一种使用完整的段定义99模型模型为了标记模型,使用为了标

47、记模型,使用.MODEL语句,后面跟随存储语句,后面跟随存储器系统的长度器系统的长度TINY 模型模型 要求将全部的软件和数据都安排在要求将全部的软件和数据都安排在64KB存储器段内存储器段内SMALL模型模型 要求只用一个数据段和一个代码段,要求只用一个数据段和一个代码段,总计占总计占128KB的存储器包括堆栈段的存储器包括堆栈段不太常用的模型还有:不太常用的模型还有:MEDIUM、COMPACT、LARGE、HUGE和和FLAT等等100例例 25将一个存储器块将一个存储器块(LISTA)100个字节的内容复制到存个字节的内容复制到存储器块储器块(LISTB)101102完整段定义完整段定

48、义注意,加载程序不能自动初始化注意,加载程序不能自动初始化DS和和ES,必须将,必须将程序中的说明的段地址装入这些存放器程序中的说明的段地址装入这些存放器103例例 26将一个存储器块将一个存储器块(LISTA)100个字节的内容复制到存个字节的内容复制到存储器块储器块(LISTB)0000 0100Stack_SEG segment STACKSTACK_SEG ENDSDATA_SEG SEGMENT DATA0200000000C80000?DW 100H DUP (?)DB 100 DUP (?)0000 0064LISTA?DB 100 DUP (?)0064-0064LISTB?D

49、ATA_SEG ENDS104105例例 27用用完整段定义模型完整段定义模型 , USE16 或或USE32 伪指令,将伪指令,将一个存储器块一个存储器块(LISTA)100个字节的内容复制到存储个字节的内容复制到存储器块器块(LISTB)USE16或或USE32伪指令通知汇编程序,令微处理器伪指令通知汇编程序,令微处理器使用使用16位或位或32位指令模型位指令模型1060000 0100Stack_SEG segment STACKSTACK_SEG ENDSDATA_SEG SEGMENT DATA0200000000C80000?DW 100H DUP (?)DB 100 DUP (?

50、)0000 0064LISTA?DB 100 DUP (?)0064-0064LISTB?DATA_SEG ENDS.386;select the 80386107108例例 28使用使用 完整段定义完整段定义 格式,从键盘上读字符并将它显格式,从键盘上读字符并将它显示在屏幕上示在屏幕上DOS功能调用功能调用109110例例 29使用使用模型模型 格式,从键盘上读字符并将它显示在屏幕格式,从键盘上读字符并将它显示在屏幕上上DOS功能调用功能调用111112 实验一: 存储区1中存放着ASCII码表00H7FH,要求编写程序, 将存储区1中的内容复制到存储区2。然后,将存储区2中的数 字编码转换

51、为如下编码: 30HAAH,31HBBH,32HCCH 33HDDH,34HEEH,35HFFH,36HA8H,37HBFH 38HC9H, 39HD1H。113小结小结数据传送指令在两存放器之间、存放器与存储器之间、数据传送指令在两存放器之间、存放器与存储器之间、存放器与堆栈之间、存储器与堆栈之间、累加器与存放器与堆栈之间、存储器与堆栈之间、累加器与 I/O端口之间、标志存放器与堆栈之间传送数据。存端口之间、标志存放器与堆栈之间传送数据。存储器到存储器的传送只允许用于储器到存储器的传送只允许用于MOVS 指令。指令。数据传送指令包括数据传送指令包括MOV, PUSH, POP, XCHG,

52、XLAT, IN, OUT, LEA, LDS, LES, LSS, LGS, LFS, LAHF, SAHF; 还有还有BSWAP, MOVSX, MOVZX和和CMOV,也包括串操作指令也包括串操作指令: LODS, STOS, MOVS, INS和和OUTS。114指令的第一个字节存放操作码。操作码规定微处理器指令的第一个字节存放操作码。操作码规定微处理器执行的操作。有些指令的操作码前可以有一个或多个执行的操作。有些指令的操作码前可以有一个或多个超越前缀。超越前缀。许多指令中的许多指令中的D位用于选择数据流的方向。如果位用于选择数据流的方向。如果D= 0, 数据从数据从REG字段流向指令

53、的字段流向指令的R/M字段。如果字段。如果D= 1, 那那么数据从么数据从R/M字段流向字段流向REG字段。字段。大多数指令中的大多数指令中的W位用于选择数据的长度。如果位用于选择数据的长度。如果 W = 0, 数据是字节长度;如果数据是字节长度;如果W = 1,数据是字长度。在数据是字长度。在80386和更高档型号的微处理器中,和更高档型号的微处理器中,W= 1,指定字或,指定字或者双字的存放器。者双字的存放器。115MOD为机器语言指令的为机器语言指令的R/M字段选择寻址方式。如字段选择寻址方式。如果果MOD= 00, 表示没有位移量。如果表示没有位移量。如果MOD= 01,有有8位位符号

54、扩展的位移量。如果符号扩展的位移量。如果MOD= 10,那么有那么有16位的位位的位移量。如果移量。如果MOD= 11, 那么操作数为存放器而不是存那么操作数为存放器而不是存储单元。在储单元。在80386和更高档型号的微处理器中,和更高档型号的微处理器中,MOD也可用于指定用也可用于指定用32位的位移量。位的位移量。当当MOD= 11时,用时,用3位二进制编码指定位二进制编码指定REG和和R/M字字段。段。8位存放器是位存放器是AH, AL, BH, BL, CH, CL, DH和和 DL。16位存放器是位存放器是AX, BX, CX, DX, SP, BP, DI和和 SI。 32位存放器是

55、位存放器是EAX, EBX, ECX, EDX, ESP, EBP, EDI, 和和ESI。116当当R/M字段定义为存储器寻址方式时,在字段定义为存储器寻址方式时,在16位指令中位指令中3位二进制码可选择下面的方式之一位二进制码可选择下面的方式之一: BX+DI, BX+SI, BP+DI, BP+SI, BX, BP, DI或或SI。在在80386和更高档型号的微处理器中,和更高档型号的微处理器中,R/M字段指定字段指定EAX, EBX, ECX, EDX, EBP, EDI , ESI 或寻址存储或寻址存储器数据的比例变址方式之一。如果选择了比例变址方器数据的比例变址方式之一。如果选择了

56、比例变址方式式 (R/M= 100),那么加到指令上的附加字节比例,那么加到指令上的附加字节比例因子变址字节指定基址存放器、变址存放器及比例因子变址字节指定基址存放器、变址存放器及比例因子。因子。除了除了BP或或EBP寻址存储器以外,所有存储器寻址方寻址存储器以外,所有存储器寻址方式都默认寻址数据段中的数据。式都默认寻址数据段中的数据。117段存放器只能通过段存放器只能通过MOV, PUSH或或POP指令访问。指令访问。MOV指令可以将段存放器的内容传送到指令可以将段存放器的内容传送到16位存放器,位存放器,反之亦然。反之亦然。MOV CS, reg或或POP CS指令是不允许的,指令是不允许

57、的,因为这些指令只改变了指令地址的一局部。因为这些指令只改变了指令地址的一局部。80386Pentium4中有两个附加的段存放器中有两个附加的段存放器FS和和CS。118在存放器与堆栈之间或存储单元与堆栈之间通过在存放器与堆栈之间或存储单元与堆栈之间通过 PUSH和和POP指令传送数据。这些指令允许立即数压指令传送数据。这些指令允许立即数压入堆栈,允许在标志存放器与堆栈之间传送,及在堆入堆栈,允许在标志存放器与堆栈之间传送,及在堆栈与存放器之间传送全部栈与存放器之间传送全部16位通用存放器。当数据传位通用存放器。当数据传送到堆栈时,一次总是传送两个字节。送到堆栈时,一次总是传送两个字节。808

58、680286,高字节放入,高字节放入SP-1地址单元,而低字地址单元,而低字节放入节放入SP-2地址单元。数据存入堆栈以后,地址单元。数据存入堆栈以后, SP-2。在。在80386Pentium4中,来自存储单元或存放器的中,来自存储单元或存放器的4字节字节数据也可以传送到堆栈。数据也可以传送到堆栈。119在堆栈和标志存放器之间传送数据的操作码是在堆栈和标志存放器之间传送数据的操作码是PUSHF和和POPF。在堆栈和存放器之间传送全部。在堆栈和存放器之间传送全部16位位存放器的操作码是存放器的操作码是PUSHA和和POPA。在。在80386和更高和更高档型号的微处理器中,档型号的微处理器中,P

59、USHED和和POPFD在微处理在微处理器和堆栈之间传送器和堆栈之间传送EFLAGS的内容。的内容。LFA, LDS和和LES指令将有效地址装入一个存放器或指令将有效地址装入一个存放器或两个存放器。两个存放器。 LEA指令将有效地址装入任一指令将有效地址装入任一16位存位存放器,而放器,而LDS和和LES将有效地址装入任一将有效地址装入任一16位存放器位存放器及及DS或或ES。在。在80386和更高档型号的微处理器中,附和更高档型号的微处理器中,附加指令加指令LFS,LGS和和LSS用于加载一个用于加载一个16位存放器和位存放器和FS,GS或或SS。120传数据传送指令使用传数据传送指令使用D

60、I及或及或SI寻址存储器。寻址存储器。DI偏移偏移地址位于附加段,而地址位于附加段,而SI偏移地址位于数据段。偏移地址位于数据段。方向标志位方向标志位(D)为用于串操作指令的为用于串操作指令的DI或或SI选择自动选择自动增量或自动减量操作方式。为了将增量或自动减量操作方式。为了将D清零,使用清零,使用CLD指令,以便选择自动增量方式。为了设置指令,以便选择自动增量方式。为了设置D为为1,使,使用用STD指令,以便选择自动减量方式。对于字节操作,指令,以便选择自动减量方式。对于字节操作,DI和和/或或SI增增1或减或减1,对于字操作那么是增,对于字操作那么是增2或减或减2,而对于双字操作那么是增

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论