版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、郑州大学 计算机系 穆玲玲 32位汇编语言程序设计教学重点教学重点n数据传送数据传送n算数运算算数运算n位操作位操作郑州大学 计算机系 穆玲玲 32位汇编语言程序设计5.15.1数据传送数据传送 n数据传送是计算机中最基本、最重要数据传送是计算机中最基本、最重要的一种操作的一种操作, ,由传送指令实现。由传送指令实现。n除标志寄存器传送指令外,均除标志寄存器传送指令外,均不影响不影响标志标志位位郑州大学 计算机系 穆玲玲 32位汇编语言程序设计通用数据传送指令通用数据传送指令 n通用数据传送指令包括通用数据传送指令包括qmovqxchgqxlat郑州大学 计算机系 穆玲玲 32位汇编语言程序设
2、计传送指令传送指令mov(move)n把一个字节,字或者双字的操作数从把一个字节,字或者双字的操作数从源地址传送至目的地址源地址传送至目的地址mov reg/mem,immmov reg/mem,imm;立即数送寄存器或主存;立即数送寄存器或主存例题例题5-1mov reg/mem/seg,regmov reg/mem/seg,reg;寄存器送(段)寄存器或主存;寄存器送(段)寄存器或主存例题例题5-2mov reg/seg,memmov reg/seg,mem;主存送(段)寄存器;主存送(段)寄存器例题例题5-3mov reg/mem,segmov reg/mem,seg;段寄存器送寄存器或
3、主存;段寄存器送寄存器或主存例题例题5-5例5-1:立即数传送mov al,4mov al,4;al4;al4,字节传送,字节传送mov cx,0ffhmov cx,0ffh;cx00ffh;cx00ffh,字传送,字传送mov esi,200hmov esi,200h;esi00000200h;esi00000200h,双字传送,双字传送mov byte ptr esi,0ah mov byte ptr esi,0ah ;ds:esi 0ah;ds:esi 0ah,byte ptrbyte ptr说明是字节操作说明是字节操作mov dword ptr esi+4,0bh mov dword
4、ptr esi+4,0bh ;ds:esi+2 0000000bh;ds:esi+2 0000000bh,;dword ptr;dword ptr说明是双字操作说明是双字操作 注意立即数是字节量注意立即数是字节量,字量还是双字量字量还是双字量 明确指令是字节操作,字操作还是双字操作明确指令是字节操作,字操作还是双字操作郑州大学 计算机系 穆玲玲 32位汇编语言程序设计两个操作数的类型要一致两个操作数的类型要一致n 绝大多数双操作数指令,除非特别说明,目绝大多数双操作数指令,除非特别说明,目的操作数与源操作数必须类型一致,否则为非的操作数与源操作数必须类型一致,否则为非法指令法指令mov al,
5、050ahmov al,050ah;非法指令:;非法指令:050ah050ah为字,而为字,而alal为字节为字节n 寄存器有明确的字节或字类型,有寄存器参寄存器有明确的字节或字类型,有寄存器参与的指令其操作数类型就是寄存器的类型与的指令其操作数类型就是寄存器的类型n 对于存储器单元与立即数同时作为操作数的对于存储器单元与立即数同时作为操作数的情况,必须显式指明;情况,必须显式指明;byte ptrbyte ptr指示字节类型,指示字节类型,word ptrword ptr指示字类型指示字类型郑州大学 计算机系 穆玲玲 32位汇编语言程序设计要小心段寄存器的操作要小心段寄存器的操作n不允许立即
6、数传送给段寄存器不允许立即数传送给段寄存器mov ds,100h;非法指令:立即数不能传送段寄存器;非法指令:立即数不能传送段寄存器n不允许直接改变不允许直接改变cs值值mov cs,si;不允许使用的指令;不允许使用的指令n不允许段寄存器之间的直接数据传送不允许段寄存器之间的直接数据传送mov ds,es;非法指令:不允许段寄存器间传送;非法指令:不允许段寄存器间传送例5-2:寄存器传送mov eax,ebx ;eaxebxmov ah,al;ahalmov ebx,eax ;ds:ebxeax例5-3:存储器传送mov al,ebx ; alds:ebxmov dx,ebp;dxss:eb
7、pmov es,esi;esds:esi 不存在存储器向存储器的传送指令不存在存储器向存储器的传送指令继续继续例5-4;da1da1单元的数据传送到单元的数据传送到da2da2单元单元.datada1 dword 34567890hda2 dword 12345678h.codemov eax,da1;eaxda1(将(将da1内容送内容送e eax)mov da2,eax ;da2eax;da1、da2实际表示直接寻址方式实际表示直接寻址方式例5-5:段寄存器传送mov si,dsmov ax,esmov ds,ax 对段寄存器的操作有一些限制对段寄存器的操作有一些限制郑州大学 计算机系 穆
8、玲玲 32位汇编语言程序设计交换指令交换指令xchg(exchange)n把两个地方的数据进行互换把两个地方的数据进行互换n寄存器与寄存器之间对换数据寄存器与寄存器之间对换数据n寄存器与存储器之间对换数据寄存器与存储器之间对换数据n不能在存储器与存储器之间对换数据不能在存储器与存储器之间对换数据xchg reg,reg/memxchg reg,reg/mem;reg reg reg/memreg/mem例题例题5-7例题例题5-6例5-6:寄存器间交换mov eax,12345678hmov ebx,9abcdef0hxchg eax,ebx;eax=9abcdef0h,ebx=1234567
9、8h xchg ax,bx;ax=5678h,bx=def0hxchg ah,al;ax=7856h.data .data b_da equ this byteb_da equ this bytew_da equ this wordw_da equ this wordda dword 100da dword 100.code.codexchg eax,daxchg eax,da; ; 双字交换双字交换; ;也可以表达为也可以表达为xchg da,eaxxchg da,eaxxchg ax,w_da;xchg ax,w_da;字交换字交换; ;也可以表达为也可以表达为xchg w_da,axxc
10、hg w_da,axxchg al,b_da; xchg al,b_da; 字节交换字节交换; ;也可以表达为也可以表达为xchg b_da,alxchg b_da,al例5-7:寄存器与存储器交换郑州大学 计算机系 穆玲玲 32位汇编语言程序设计n换码指令执行前:换码指令执行前:在主存建立一个在主存建立一个字节量表格字节量表格,内含要转换成的目的代码,内含要转换成的目的代码表格首地址表格首地址存放于存放于e ebxbx,alal存放相对表格首地址的存放相对表格首地址的位移量位移量n换码指令执行后:换码指令执行后:将将alal寄存器的内容转换为寄存器的内容转换为目标代码目标代码3. 换码指令换
11、码指令xlat(translate)n将将ebx指定的缓冲区中、指定的缓冲区中、al指定的位指定的位移处的一个字节数据取出赋给移处的一个字节数据取出赋给alxlatxlat;alds:ebx+alalds:ebx+al例题例题5-8例5-8(1/3):代码转换;一位一位16进制数转换为进制数转换为ascii码码.386.model flat,stdcallinclude masm32includeio32.inc.stack继续继续例5-8(2/3):代码转换.dataascii byte 30h,31h,32h,33h,34h,35h,36h,37h,38h,39h,41h,42h,43h,
12、44h,45h,46hprompt byte input a number between:015,0dh, 0ah,0继续继续例5-8(3/3):代码转换.codestart:mov ebx, offset ascii ;ebx存放存放ascii表的首地址表的首地址writestring promptreadudecbyte al ;读入读入015之间的十进制数存放在之间的十进制数存放在al寄存器中寄存器中xlat ;换码换码al - ds:ebx+alwritecrlf;显示回车换行显示回车换行writechar al ;显示显示al中存放的字符中存放的字符retend start 换码指
13、令没有显式的操作数,但使用换码指令没有显式的操作数,但使用了了ebx和和al;因为换码指令使用了隐;因为换码指令使用了隐含寻址方式含寻址方式采用默认操作数采用默认操作数返回返回郑州大学 计算机系 穆玲玲 32位汇编语言程序设计5.1.2 地址传送指令地址传送指令n地址传送指令将存储器单元的逻地址传送指令将存储器单元的逻辑地址送至指定的寄存器辑地址送至指定的寄存器q有效地址传送指令有效地址传送指令 leaq指针传送指令指针传送指令 lds和和lesn注意不是获取存储器单元的内容注意不是获取存储器单元的内容郑州大学 计算机系 穆玲玲 32位汇编语言程序设计有效地址传送指令有效地址传送指令lea(l
14、oad ea)n将存储器操作数的有效地址传送将存储器操作数的有效地址传送至指定的寄存器中。至指定的寄存器中。q在实模式下,使用在实模式下,使用16位寄存器位寄存器q在保护模式下使用在保护模式下使用32位寄存器位寄存器lea r16/r32,memlea r16/r32,mem;r16memr16mem的有效地址的有效地址eaea郑州大学 计算机系 穆玲玲 32位汇编语言程序设计例题例题5-8获取有效地址的指令:获取有效地址的指令:mov ebx, offset asciimov ebx, offset ascii可以改写为:可以改写为:lea ebx,ascii; lea ebx,ascii;
15、 e ebx=offset aciibx=offset acii 获得主存单元的有效地址;不是物理地获得主存单元的有效地址;不是物理地址,也不是该单元的内容址,也不是该单元的内容 可以实现计算功能可以实现计算功能指针传送指令指针传送指令lds r16,memlds r16,mem;r16memr16mem,;dsmem+2dsmem+2n 实模式下,实模式下,lds指令将主指令将主存中存中mem指定的字送至指定的字送至r16,并将,并将mem的下一字的下一字送送ds寄存器。寄存器。n 在保护模式下,在保护模式下,lds指令指令将主存中将主存中mem指定的前面指定的前面4个字节送至个字节送至32
16、位寄存器,位寄存器,并将并将mem的下一字送的下一字送ds寄存器寄存器。les r16,memles r16,mem;r16memr16mem,;esmem+2esmem+2n 实模式下,实模式下,les指令将主指令将主存中存中mem指定的字送至指定的字送至r16,并将,并将mem的下一字的下一字送送ds寄存器。寄存器。n 在保护模式下,在保护模式下,les指令指令将主存中将主存中mem指定的前面指定的前面4个字节送至个字节送至32位寄存器,位寄存器,并将并将mem的下一字送的下一字送ds寄存器寄存器。例题例题5-9例5-9:地址指针传送fvar fword 0;fvar fword 0;定义
17、地址指针定义地址指针fvarfvarmov dword ptr fvar, offset asciimov dword ptr fvar, offset ascii; ;将将asciiascii偏移地址存入偏移地址存入fvarfvar的前两个字的前两个字mov word ptr fvar+4, dsmov word ptr fvar+4, ds; ;将将asciiascii所在数据段所在数据段dsds的值存入的值存入fvarfvar的后面的后面一个字一个字lds esi,fvarlds esi,fvar; ;将将fvarfvar中存放的前两个字装入中存放的前两个字装入esiesi,后一个,后一
18、个字装入字装入dsds fvar指定主存的连续指定主存的连续6 6个字节作为逻辑个字节作为逻辑地址(地址(4848位的地址指针),送入位的地址指针),送入ds:r32ds:r32或或es:r32es:r32 windows2000/xp环境下的应用程序环境下的应用程序一般不使用地址指针传送指令,因为这一般不使用地址指针传送指令,因为这种操作可能会造成系统崩溃。种操作可能会造成系统崩溃。 例5-10(1/4):数据传送的综合实例 .386.model flat, stdcall.dataval1 word 1000hval2 word 2000harrayb byte 10h,20h,30h,4
19、0h,50harrayw word 100h,200h,300harrayd dword 10000h,20000h例5-10(2/4):数据传送的综合实例 .codestart:; 内存与内存之间的数据交换内存与内存之间的数据交换mov ax,val1; ax = 1000hxchg ax,val2; ax = 2000h, val2 = 1000hmov val1,ax; val1 = 2000h例5-10(3/4):数据传送的综合实例 ; 字节数组访问字节数组访问mov al,arrayb ; al = 10hmov al,arrayb+1; al = 20hmov al,arrayb+
20、2; al = 30h; 字数组访问字数组访问mov ax,arrayw ; ax = 100hmov ax,arrayw+2; ax = 200h例5-10(4/4):数据传送的综合实例 ; 双字数组访问双字数组访问mov eax,arrayd; eax = 10000hmov eax,arrayd+4; eax = 20000hmov eax,arrayd+type arrayd; eax = 20000hend start郑州大学 计算机系 穆玲玲 32位汇编语言程序设计例例5-115-11:移位:移位6464位数据位数据分析:为保证数据各位正确移位,分析:为保证数据各位正确移位, 64
21、位数据的位数据的8个字节应从高个字节应从高 字节开始、依右而左依次左字节开始、依右而左依次左 移移8位(一个字节),采用字位(一个字节),采用字 节传送指令。节传送指令。例5-11(1/3):移位64位数据 .386.model flat,stdcall.stack.dataqvar qword 1234567887654321h例5-11(2/3):移位64位数据 .codestart: mov al,byte ptr qvar6mov byte ptr qvar7,almov al,byte ptr qvar5mov byte ptr qvar6,almov al,byte ptr qva
22、r4mov byte ptr qvar5,almov al,byte ptr qvar3mov byte ptr qvar4,al例5-11(3/3):移位64位数据 mov al,byte ptr qvar2mov byte ptr qvar3,almov al,byte ptr qvar1mov byte ptr qvar2,almov al,byte ptr qvar0mov byte ptr qvar1,almov byte ptr qvar0,0retend start郑州大学 计算机系 穆玲玲 32位汇编语言程序设计例例5-11示意图示意图12 34 56 78 87 65 43
23、2112 34 56 78 87 65 430郑州大学 计算机系 穆玲玲 32位汇编语言程序设计5.2 5.2 算术运算算术运算 n算术运算是算术运算是ia-32指令系统中另指令系统中另外一种基本的操作指令,可以用外一种基本的操作指令,可以用来执行字节,字或双字的二进制来执行字节,字或双字的二进制加减乘除算术运算。加减乘除算术运算。n这类指令会根据计算结果设置相这类指令会根据计算结果设置相应的标志位。应的标志位。 郑州大学 计算机系 穆玲玲 32位汇编语言程序设计5.2.1 5.2.1 加法指令加法指令 n执行双字,字或字节的加法运算。执行双字,字或字节的加法运算。q addqadcqinc
24、郑州大学 计算机系 穆玲玲 32位汇编语言程序设计加法指令加法指令add add nadd指令将源与目的操作数相加,结指令将源与目的操作数相加,结果送到目的操作数果送到目的操作数nadd指令按状态标志的定义相应设置指令按状态标志的定义相应设置add reg,imm/reg/memadd reg,imm/reg/mem;regregregregimm/reg/memimm/reg/memadd mem,imm/regadd mem,imm/reg;memmemmemmemimm/regimm/reg例题例题5-12.data var1 dword 10000hvar2 dword 2000h.c
25、odestart: mov al,0fbh ;al=0fbhadd al,07h;al=02hmov eax, var1;eax=10000hadd eax, var2;eax=12000hret例例5-12:加法运算加法运算 返回返回郑州大学 计算机系 穆玲玲 32位汇编语言程序设计设置标志位设置标志位 nadd指令按照状态标志的定义相应设指令按照状态标志的定义相应设置标志位的置标志位的0或或1状态。状态。q在在07+fbh02h运算后:标志寄存器的运算后:标志寄存器的内容为内容为00000213h,对应的,对应的of=0、sf=0、zf=0、af=1、pf=0、cf=1q在在10000h+
26、20000h=30000h运算后,运算后,标志寄存器标志寄存器fl的内容为的内容为00000206h,对,对应的应的of=0、sf=0、zf=0、af=0、pf=1、cf=0。 注意,注意,pf仅反映低仅反映低8位中位中“1”的个数,的个数,af只反映只反映d3对对d4位是否有进位。位是否有进位。 郑州大学 计算机系 穆玲玲 32位汇编语言程序设计大小写字符转换大小写字符转换 n加法指令也能用作其它的用途,比如加法指令也能用作其它的用途,比如大小写字母的转换。大小写字母的转换。 q大写字母大写字母az的的ascii码是码是41h5ahq小写字母小写字母az的的ascii码是码是61h7ahq它
27、们之间相差它们之间相差20hn要将大写字母转换为相应的小写字母要将大写字母转换为相应的小写字母只需要加上只需要加上20h即可。即可。 mov al,a;al=41h(a的的ascii码)码)add al, 20h;al=61h(a的的ascii码)码)例例5-13:大写字母转换为小写字母大写字母转换为小写字母 返回返回郑州大学 计算机系 穆玲玲 32位汇编语言程序设计带进位加法指令带进位加法指令adc adc n adc指令将源与目的操作数相加,再加上进指令将源与目的操作数相加,再加上进位位cf标志,结果送到目的操作数标志,结果送到目的操作数n adc指令按状态标志的定义相应设置指令按状态标志
28、的定义相应设置n adc指令主要与指令主要与add配合,实现多精度加法配合,实现多精度加法运算运算adc reg,imm/reg/memadc reg,imm/reg/mem;regregregregimm/reg/memimm/reg/memcfcfadc mem,imm/regadc mem,imm/reg;memmemmemmemimm/regimm/regcfcf例题例题5-14a.386.model flat, stdcall.stack 4096.datadvar1 dword 82347856h,67783000hdvar2 dword 12348998h,67762000hdv
29、ar3 dword 2 dup(?)例例5-14a(1/2):):无符号无符号6464位二进制加法运算位二进制加法运算 继续继续.codestart:mov ebx,0mov esi,4mov eax,dvar1ebxadd eax,dvar2ebxmov dvar3bx,eaxmov eax,dvar1ebxesiadc eax,dvar2ebxesimov dvar3ebxesi,eaxretend start例例5-14a(2/2):):无符号无符号6464位二进制加法运算位二进制加法运算 返回返回郑州大学 计算机系 穆玲玲 32位汇编语言程序设计增量指令增量指令inc(incremen
30、t)ninc指令对操作数加指令对操作数加1(增量)(增量)ninc指令不影响进位指令不影响进位cf标志,按定义标志,按定义设置其他状态标志设置其他状态标志inc reg/meminc reg/mem;reg/memreg/memreg/memreg/mem1 1inc ebxinc ebxinc byte ptrebx 例题例题5-14b.386.model flat, stdcall.stack 4096.datadvar1 dword 82347856h,67783000hdvar2 dword 12348998h,67762000hdvar3 dword 2 dup(?)例例5-14b(
31、1/3):):无符号无符号6464位二进制加法运算位二进制加法运算 继续继续修改例题修改例题5-11a的代码段,实现同样的功能的代码段,实现同样的功能.codestart:mov ebx,0mov esi,0mov eax,dvar1ebxesi*4add eax, dvar2ebxesi*4mov dvar3bxesi*4,eax例例5-14b(2/3):):无符号无符号6464位二进制加法运算位二进制加法运算 继续继续inc esimov eax,dvar1ebxesi*4adc eax, dvar2ebxesi*4mov dvar3ebxesi*4,eaxretend start例例5-
32、14b(3/3):):无符号无符号6464位二进制加法运算位二进制加法运算 返回返回郑州大学 计算机系 穆玲玲 32位汇编语言程序设计5.2.2 5.2.2 减法指令减法指令 nsub指令将目的操作数减去源操作数,指令将目的操作数减去源操作数,结果送到目的操作数结果送到目的操作数nsub指令按照定义相应设置状态标志指令按照定义相应设置状态标志sub reg,imm/reg/memsub reg,imm/reg/mem;regregregregimm/reg/memimm/reg/memsub mem,imm/regsub mem,imm/reg;memmemmemmemimm/regimm/r
33、eg例5-15(1/2):减法运算.datavar1 dword 10000hvar2 dword 2000h.codestart: mov al,0fbh;al=0fbhsub al,07h;al=f4h,eflags=00000282h例5-15(2/2):减法运算mov eax, var1;eax=10000hsub eax, var2;eax=0000e000h;eflags=00000206hret郑州大学 计算机系 穆玲玲 32位汇编语言程序设计subsub指令设置标志位的状态指令设置标志位的状态 nsub指令按照状态标志的定义相应设置指令按照状态标志的定义相应设置标志位的状态。标
34、志位的状态。q在在0fbh-07hf4h运算后:标志寄存器的运算后:标志寄存器的内容为内容为00000282h,对应的,对应的of=0、sf=1、zf=0、af=0、pf=1、cf=0。q在在10000h-2000h=e000h运算后,标志寄运算后,标志寄存器存器fl的内容为的内容为00000206h,对应的,对应的of=0、sf=0、zf=0、af=0、pf=1、cf=0。郑州大学 计算机系 穆玲玲 32位汇编语言程序设计例例5-16 小写字母转换为大写字母小写字母转换为大写字母n减法指令也能用于大小写字母的转换。减法指令也能用于大小写字母的转换。n分析:要将小写字母转换为相应的大分析:要将
35、小写字母转换为相应的大写字母只需要减去写字母只需要减去20h即可。即可。mov al,a;al=61h(a的的ascii码)码)sub al, 20h;al=41h(a的的ascii码)码)郑州大学 计算机系 穆玲玲 32位汇编语言程序设计带借位减法指令带借位减法指令sbbn sbb指令将目的操作数减去源操作数,再减指令将目的操作数减去源操作数,再减去借位去借位cf(进位),结果送到目的操作数。(进位),结果送到目的操作数。n sbb指令按照定义相应设置状态标志指令按照定义相应设置状态标志n sbb指令主要与指令主要与sub配合,实现多精度减法配合,实现多精度减法运算运算sbb reg,imm
36、/reg/memsbb reg,imm/reg/mem;regregregregimm/reg/memimm/reg/memcfcfsbb mem,imm/regsbb mem,imm/reg;memmemmemmemimm/regimm/regcfcf例题例题5.17.386.386.model flat, stdcall.model flat, stdcall.stack 4096.stack 4096.data.datadvar1 dword 82347856h,67783000hdvar1 dword 82347856h,67783000hdvar2 dword 12348998h,6
37、7762000hdvar2 dword 12348998h,67762000hdvar3 dword 2 dup(?)dvar3 dword 2 dup(?)例例5-17(1/3):无符号无符号64位二进制减法运算位二进制减法运算 继续继续.code.codestart:start:mov ebx,0mov ebx,0mov esi,4mov esi,4mov eax,dvar1ebxmov eax,dvar1ebxsub eax,dvar2ebxsub eax,dvar2ebxmov dvar3bx,eaxmov dvar3bx,eax例例5-17(2/3):无符号无符号64位二进制减法运算
38、位二进制减法运算 继续继续mov eax,dvar1ebxesimov eax,dvar1ebxesisbb eax,dvar2ebxesisbb eax,dvar2ebxesimov dvar3ebxesi,eaxmov dvar3ebxesi,eaxretretend startend start例例5-17(3/3):无符号无符号64位二进制减法运算位二进制减法运算 返回返回郑州大学 计算机系 穆玲玲 32位汇编语言程序设计减量指令减量指令dec(decrement)ndec指令对操作数减指令对操作数减1(减量)(减量)ndec指令不影响进位指令不影响进位cf标志,按定义标志,按定义设置
39、其他状态标志设置其他状态标志dec reg/memdec reg/mem;reg/memreg/memreg/memreg/mem1 1dec ecxdec ecxdec word ptr esidec word ptr esi inc指令和指令和dec指令都是单操作数指令指令都是单操作数指令 主要用于对计数器和地址指针的调整主要用于对计数器和地址指针的调整郑州大学 计算机系 穆玲玲 32位汇编语言程序设计求补指令求补指令neg(negative)nneg指令对操作数执行求补运算:用指令对操作数执行求补运算:用零减去操作数,然后结果返回操作数零减去操作数,然后结果返回操作数n求补运算也可以表达
40、成:将操作数按求补运算也可以表达成:将操作数按位取反后加位取反后加1nneg指令对标志的影响与用零作减法指令对标志的影响与用零作减法的的sub指令一样指令一样neg reg/memneg reg/mem;reg/mem0reg/mem0reg/memreg/mem例题例题5-18.386.386.model flat,stdcall.model flat,stdcallinclude masm32includeio32.incinclude masm32includeio32.inc.stack.stack.code.codestart: start: mov eax, -100mov eax
41、, -100neg eaxneg eaxwritesdecdword eaxwritesdecdword eaxretretend startend start例例5-18:求一个数的相反数求一个数的相反数郑州大学 计算机系 穆玲玲 32位汇编语言程序设计比较指令比较指令cmp(compare)ncmp指令将目的操作数减去源操作数,指令将目的操作数减去源操作数,按照定义相应设置状态标志按照定义相应设置状态标志ncmp指令执行的功能与指令执行的功能与sub指令,但指令,但结果不回送目的操作数结果不回送目的操作数cmp reg,imm/reg/memcmp reg,imm/reg/mem;regr
42、egimm/reg/memimm/reg/memcmp mem,imm/regcmp mem,imm/reg;memmemimm/regimm/reg郑州大学 计算机系 穆玲玲 32位汇编语言程序设计5.2.3 5.2.3 乘法指令乘法指令 n乘法指令用来实现两个二进制操作乘法指令用来实现两个二进制操作数的相乘运算数的相乘运算 。q无符号数乘法指令无符号数乘法指令mulq有符号数乘法指令有符号数乘法指令imul。 郑州大学 计算机系 穆玲玲 32位汇编语言程序设计无符号数乘法指令无符号数乘法指令mul n mul指令执行无符号二进制数的乘法指令执行无符号二进制数的乘法运算运算 。mul r8/
43、m8mul r8/m8; ;无符号字节乘:无符号字节乘:axaxalalr8/m8r8/m8mul r16/m16mul r16/m16; ;无符号字乘:无符号字乘:; ; dx.axdx.axaxaxr16/m16r16/m16mul r32/m32mul r32/m32; ;无符号双字乘:无符号双字乘:; ; edx.eaxedx.eaxeaxeaxr32/m32r32/m32.386.386.model flat,stdcall.model flat,stdcallinclude masm32includeio32.incinclude masm32includeio32.inc.sta
44、ck.stack.data .data prompt3 byte 0dh, 0ah, x prompt3 byte 0dh, 0ah, x* *y = ,0y = ,0 x word 0fffeh x word 0fffeh y word 001eh y word 001eh result dword ? result dword ?例例5-19(1/2):16位位无符号数乘法无符号数乘法 继续继续.codestart: mov ax,x;ax-x,mul y ;乘法:乘法:ax*ymov word ptr result , ax;存放乘积的低字部分存放乘积的低字部分mov word ptr
45、result+2,dx;存放乘积的高字部分存放乘积的高字部分writestring prompt3writehexdword result; 显示乘积显示乘积retend start例例5-19(2/2):返回返回郑州大学 计算机系 穆玲玲 32位汇编语言程序设计有符号数乘法指令有符号数乘法指令i imulmul n imulimul指令执行无符号二进制数的乘法指令执行无符号二进制数的乘法运算运算 。imul r8/m8imul r8/m8; ;有符号字节乘:有符号字节乘:axaxalalr8/m8r8/m8imul r16/m16imul r16/m16 ; ;有符号字乘:有符号字乘:dx.
46、axdx.axaxaxr16/m16r16/m16imul r32/m32imul r32/m32 ; ;有符号双字乘:有符号双字乘:; ; edx.eaxedx.eaxeaxeaxr32/m32r32/m32郑州大学 计算机系 穆玲玲 32位汇编语言程序设计乘法指令对标志的影响乘法指令对标志的影响n乘法指令如下影响乘法指令如下影响of和和cf标志:标志:qmul指令指令若乘积的高一半(若乘积的高一半(ah或或dx)为)为0,则,则of=cf=0;否则;否则of=cf=1qimul指令指令若乘积的高一半是低一半若乘积的高一半是低一半的的符号扩展符号扩展,则,则of=cf=0;否则均为;否则均为
47、1n乘法指令对其他状态标志乘法指令对其他状态标志没有定义没有定义 对标志没有定义:指令执行后这些标志是任对标志没有定义:指令执行后这些标志是任意的、不可预测(就是谁也不知道是意的、不可预测(就是谁也不知道是0还是还是1) 对标志没有影响:指令执行不改变标志状态对标志没有影响:指令执行不改变标志状态郑州大学 计算机系 穆玲玲 32位汇编语言程序设计imul的其他格式的其他格式imul r16,r16/m16/i8/i16;有符号字乘:有符号字乘:r16r16r16/m16/i8/i16imul r32,r32/m32/i8/i16/i32;有符号双字乘:有符号双字乘:; ;r32r32r32/m
48、32/i32/i16/i8imul r16,r16/m16,i8/i16;有符号字乘:有符号字乘:r16r16/m16*/i8/i16imul r32,r32/m32,i8/i32;有符号双字乘:有符号双字乘:r32r32/m32*/i8/i32imul eax,ebx,2;eax-ebx*2 ;x=fffe, y=001e mov ax,x;ax-x,mul y ;乘法:乘法:ax*ymov word ptr result , axmov word ptr result+2,dx;result=1dffc4 mov ax,x;ax-x,imul y ;乘法:乘法:ax*ymov word p
49、tr result , axmov word ptr result+2,dx;result=ffffffc4 mul与imul郑州大学 计算机系 穆玲玲 32位汇编语言程序设计5.2.4 5.2.4 除法指令除法指令 n除法指令执行两个二进制数的除除法指令执行两个二进制数的除法运算法运算q无符号二进制数除法指令无符号二进制数除法指令divq有符号二进制数除法指令有符号二进制数除法指令idiv两条两条指令指令n除法指令使状态标志没有定义。除法指令使状态标志没有定义。 郑州大学 计算机系 穆玲玲 32位汇编语言程序设计无符号二进制数除法指令无符号二进制数除法指令divdiv r8/m8;无符号字节
50、除:无符号字节除:alaxr8/m8的商,的商,;ahaxr8/m8的余数的余数div r16/m16;无符号字除:无符号字除:axdx.axr16/m16的商,的商,;dxdx.axr16/m16的余数的余数div r32/m32;无符号字除:无符号字除:eaxedx.eaxr32/m32的商,的商,;edxedx.eaxr16/m32的余数的余数郑州大学 计算机系 穆玲玲 32位汇编语言程序设计有符号数除法指令有符号数除法指令idiv idiv r8/m8;无符号字节除:无符号字节除:alaxr8/m8的商,的商,;ahaxr8/m8的余数的余数idiv r16/m16;无符号字除:无符号
51、字除:axdx.axr16/m16的商,的商,;dxdx.axr16/m16的余数的余数idiv r32/m32;无符号字除:无符号字除:eaxedx.eaxr32/m32的商,的商,;edxedx.eaxr16/m32的余数的余数;x=fffe, y=001e mov ax,x;ax-x,mov dx,0div y ;除法:除法:axy; ax=0888,dx000e mov ax,x;ax-x,mov dx,0idiv y ;除法:除法:axy; ax=0888,dx000e,错误,错误div与idiv郑州大学 计算机系 穆玲玲 32位汇编语言程序设计除法指令的功能除法指令的功能n除法指令
52、分无符号和有符号除法指令除法指令分无符号和有符号除法指令n除法指令的除数显式给出,隐含使用另一除法指令的除数显式给出,隐含使用另一个操作数个操作数ax和和dx作为被除数作为被除数q字节量除法:字节量除法:ax除以除以r8/m8,8位商存入位商存入al,8位余数存入位余数存入ahq字量除法:字量除法:dx.ax除以除以r16/m16,16位商存位商存入入ax,16位余数存入位余数存入dxq字量除法:字量除法:edx.eax除以除以r32/m32,32位位商存入商存入eax,32位余数存入位余数存入edxn除法指令对标志没有定义除法指令对标志没有定义n除法指令会除法指令会产生结果溢出产生结果溢出郑
53、州大学 计算机系 穆玲玲 32位汇编语言程序设计除法溢出除法溢出n当被除数远大于除数时,所得的商就有可能当被除数远大于除数时,所得的商就有可能超出它所能表达的范围。如果存放商的寄存超出它所能表达的范围。如果存放商的寄存器不能表达,便产生溢出器不能表达,便产生溢出q对对div指令,除数为指令,除数为0,或者在字节除时商超过,或者在字节除时商超过8位,或者在字除时商超过位,或者在字除时商超过16位,或者在双字除时位,或者在双字除时商超过商超过32位,则发生除法溢出。位,则发生除法溢出。q对对idiv指令,除数为指令,除数为0,或者在字节除时商不在,或者在字节除时商不在-128127范围内,或者在字
54、除时商不在范围内,或者在字除时商不在-3276832767范围内,或者在双字除时商不范围内,或者在双字除时商不在在-2322321范围内,则发生除法溢出。范围内,则发生除法溢出。除法溢出除法溢出 mov ax, 20000mov ax, 20000mov bl,10mov bl,10div bldiv bl;20000;20000101020002000; ;商在商在alal中放不下,产生溢出中放不下,产生溢出mov dx, 0mov dx, 0mov ax, 20000mov ax, 20000mov bx,10mov bx,10div bxdiv bx;20000;200001010200
55、02000; ;商在商在axax中可以放下,不产生溢出中可以放下,不产生溢出 返回返回.386.386.model flat,stdcall.model flat,stdcallinclude masm32includeio32.incinclude masm32includeio32.inc.stack.stack.data .data prompt3 byte 0dh, 0ah, quation = ,0prompt3 byte 0dh, 0ah, quation = ,0prompt4 byte prompt4 byte remainder = ,0remainder = ,0 x wo
56、rd fffehx word fffehy word 001ehy word 001ehremainder word ?remainder word ?quation word ?quation word ?例例5-20(1/2):16位位无符号数除法无符号数除法 继续继续.code.codestart: start: mov ax,x;ax-x,mov ax,x;ax-x,mov dx,0mov dx,0div y ;div y ;除法:除法:axaxy ywritestring prompt3writestring prompt3writehexword ax ;writehexword
57、ax ;显示商显示商writestring prompt4writestring prompt4writehexword dx;writehexword dx;显示余数显示余数retretend startend start例例5-20(2/2):16位位无符号数除法无符号数除法 返回返回5.2.5 符号扩展指令符号扩展指令n 什么是什么是符号扩展符号扩展n 符号扩展指令常用于获得倍长的数据符号扩展指令常用于获得倍长的数据 不影响标志位不影响标志位n字节转换为字指令字节转换为字指令cbw n字转换为双字指令字转换为双字指令cwd n字转换为双字指令字转换为双字指令cwde n双字转换为四个字指
58、令双字转换为四个字指令cdq n无符号扩展传送指令无符号扩展传送指令movzx n有符号扩展传送指令有符号扩展传送指令movsx 郑州大学 计算机系 穆玲玲 32位汇编语言程序设计符号扩展的概念符号扩展的概念n符号扩展是指用一个操作数的符号位符号扩展是指用一个操作数的符号位(即最高位)形成另一个操作数,后(即最高位)形成另一个操作数,后一个操作数的各位是全一个操作数的各位是全0(正数)或全(正数)或全1(负数)。(负数)。符号扩展不改变数据大小符号扩展不改变数据大小q对于数据对于数据64h(表示数据(表示数据100),其最高),其最高位位d7为为0,符号扩展后高,符号扩展后高8位都是位都是0,
59、成,成为为0064h(仍表示数据(仍表示数据100)q对于数据对于数据ff00h(表示有符号数(表示有符号数256),),其最高位其最高位d15为为1,符号扩展后高,符号扩展后高16位都位都是是1,成为,成为ffffff00h(仍表示有符号数(仍表示有符号数256)郑州大学 计算机系 穆玲玲 32位汇编语言程序设计字节转换为字指令字节转换为字指令cbw cbwcbw;alal的符号扩展至的符号扩展至ahah;如;如alal的最高有效位是的最高有效位是0 0,则,则ahah0000;alal的最高有效位为的最高有效位为1 1,则,则ahahffhffh。alal不变不变例例5-215-21:符号
60、扩展:符号扩展 mov al,80hmov al,80h;al=80h;al=80h cbwcbw;ax=ff80h;ax=ff80h add al,255add al,255;al=7fh;al=7fh cbwcbw;ax=007fh;ax=007fh 郑州大学 计算机系 穆玲玲 32位汇编语言程序设计字转换为双字指令字转换为双字指令cwd cwdcwd;axax的符号扩展至的符号扩展至dx.axdx.ax;如;如axax的最高有效位是的最高有效位是0 0,则,则dxdx0000;axax的最高有效位为的最高有效位为1 1,则,则dxdxffhffh。axax不变不变mov ax,-256m
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电子工序承包协议书
- 基础护理质量评价标准
- 小肌肉精细训练
- 螺旋肌肉链训练
- 2026年高端私人影院建设公司投诉处理结果跟踪与回访管理制度
- 仓库临时租赁合同
- 体育教学技能训练
- 高血压急症护理方案
- 海洋知识科普绘本
- 冠心病脑卒中健康宣教
- 交通标识牌施工合同范本
- DB37T3448.7“爱山东”政务服务平台 第7部分:业务中台对接规范
- 广西工程建设地方标准《跨坐式单轨连续轨道梁施工技术规程》
- 救生衣项目创业计划书
- 医院采购管理SOP
- 杜威《民主主义与教育》电子版
- 口腔颌面影像学
- 坚持立足中国又面向世界讲解
- 2020北师大版高中英语选择性必修三课文翻译(全册精校)
- 离婚协议书完整版Word模板下载
- 电气接线工艺培训
评论
0/150
提交评论