⑴ 直接端口寻址——指令中包含i/o端口的直接地址 (8位端口), 直接端口寻址的端口数是256个。
in al,80h;将80h端口的字节数据(8位)输入到al寄存器中。
in ax,80h;将80h端口的字数据(16位)输入到ax寄存器中。
out 80h,al;将al寄存器的内容输出到80h端口(写数据),这时80h端口宽度(数据位)是8位的。
out 80h,ax;将ax寄存器的内容输出到80h端口(写数据),这时80h端口宽度(数据位)是16位的。
直接端口地址也可以用符号表示。
out port,ax
间接端口寻址——用dx寄存器间接访问端口(16位端口) ,如果端口地址≥256(16位地址)可寻址65536个端口,就必须用间接端口寻址了。先把端口号(0000h~ffffh)存放入dx寄存器中并间接访问该端口,用于间接寻址端口的寄存器只能使用dx寄存器。
mov dx,200h ;将端口号200h存入dx中。
out dx,al ;将(al)输出到(dx)所指的端口中
mov dx,200h;将端口号200h存入dx中。
in ax,dx ;将(dx)所指的端口输入一个字到ax寄存器中。
转向的有效地址 = 当前(ip) +位移量(8位/16位)
转移指令转向的偏移地址是。
0007h+09h=0010h。 jmp short l
mov ax,0
mov bx,0
mov ax,0
l:ret例题:jmp short l ;短转移(-128∽+127)
jmp near ptr l;近转移(-32768∽+32767)
当它用于条件转移指令时,只允许8位的位移量。
注意:位移量是负数,f5是补码。
所以,转向的偏移地址=0010h+fff5h=0005h。l:mov ax,0
mov bx,0
mov ax,0
jo lret
例:设(ds)=2000h,(bx)=1256h,(si)=528fh,位移量val=20a1h,(232f7)=3280h,(264e5h)=2450h。则。
jmp bx;执行该指令后,(ip)=1256h
jmp word ptr [bx][si];指令执行后,(ip)=(20000h+1256h+528fh)=(264e5h)=2450h
jmp word ptr [bx+val];指令执行后,(ip)=(20000h+1256h+20a1h)=(232f7h)=3280h
数据交换指令。
指令格式: xchg opr1,opr2
xchg ax,bx
xchg bx,[si]
例(bx)=1230h,(si)=0046h,(ds)=2000h,(20046h)=1234h
xchg esi,edi
数据交换指令不影响标志位
**tab中存放着数字0∽9对应的ascⅱ码表。 将**中位移量为3的**取到al中。
mov bx,offset tab
mov al,3
xlat 偏移地址送寄存器指令。
指令格式:lea reg,mem;
目的操作数不能是段寄存器,源操作数是存储器操作数。 例如:
lea bx,[bx+si+0f62h]
例(bx)=0400h+003ch+0f62h=139eh
与mov bx,offset [bx+si+0f62h]指令等价。
lea dx,[bx]
lea dx,tab ;传送地址。
注:mov dx,tab ;传送该地址中的内容。
除法指令:① 无符号数除法:div src
② 带符号数除法:idiv src
■ 字节操作:
(al)←(ax)/(src) 的商;(ah)←(ax)/(src) 余数。
■ 字操作:
ax)←(dx,ax)/(src)的商;(dx)←(dx,ax)/(src)的余数。
■ 双字操作:
(eax)←(edx,eax)/(src)的商;
(edx)←(edx,eax)/(src)的余数。
例:用压缩bcd码作十进制数(28+68)运算,结果用压缩bcd码表示。
mov al,28h
mov bl,68h
add al,bl;二进制加法。
daa ;十进制调整。
则执行add后,al=90h,af=1;再执行daa指令后,正确的结果为al=96h,cf=0,af=1。
例:用非压缩bcd码作十进制数(7×9)运算,结果用非压缩bcd码表示。
mov al,07h;将十进制数7和9分别用非压缩。
bcd码表示。
mov bl,09h
mul bl
aam;乘法后的bcd码调整。
则执行mul bl后,ax=003fh,再执行aam指令后,ax=0603h。相当于十进制运算7×9=63
注意:1)80x86指令系统中只允许采用非压缩的十进制数乘法和除法运算。
2)用bcd码进行乘除法运算时,只能使用无符号数形式,因而aam和aad应固定地出现在mul指令之后和div之前。
例:设ax=0103h,bl=06h(分别表示非压缩bcd码13和6)。
aad;0103h→000dh
div bl;(al)=02h,(ah)=1
则执行上述指令序列后,商(al)=02h,余数(ah)=1。
实际上,该程序段就是做十进制的13除以6,其中13和6分别用非压缩的bcd码表示为0103h和06h。执行aad指令,就将ah中的内容乘以10,再加到al中,得到的结果为(ax)=000dh。
例:mov al,04h
mov cl,08h
mul cl;ax=0020h
aam;ax=0302h
例:mov cl,08h
mov ax,0303h
aad;0303h→0021h
div cl;ax=0104h ax/cl=33/8=4余1
shl opr,cnt;逻辑左移。
sal opr,cnt;算术左移。
shr opr,cnt;逻辑右移。
sar opr,cnt;算术右移。
rol opr,cnt;不带进位循环左移。
ror opr,cnt;不带进位循环右移。
rcl opr,cnt;带进位循环左移。
rcr opr,cnt;带进位循环右移。
说明:循环移位操作不丢失任何数据。
循环移位指令可以用来检查寄存器或存储器操作数中含1或0的个数,只要检测cf就可以对1或0计数。对n位数据用小循环移位指令循环n次,数据恢复原状;大循环移位指令循环n+1次,数据也恢复原状。
对标志位的影响。
1)按照操作数移入cf的位设置进位标志cf。算术左右移和逻辑左右移指令根据移位后的结果影响sf、zf、pf标志,若移位后操作数为0,则zf=1;shl或sal以及sar指令根据结果的最高位设置sf标志位;而shr指令执行后sf标志清0。af标志不确定。
2)所有循环移位指令对cf和of以外的状态标志不影响。
3)移位次数为1时,of位才有效,当移位次数大于1时,of不确定。
shl al,1;(al)=72h,cf=1,of=1
sar al,1;(al)=dch,cf=1,of=0
shr al,1;(al)=5ch,cf=1,of=1
ror al,1;(al)=dch,cf=1,of=1
rol al,1;(al)=73h,cf=1,of=1
rcl al,1;(al)=73h,cf=1,of=1
rcr al,1;(al)=dch,cf=1,of=0
shl ax,2 ;相当于ax内容乘以4
shl ax,5 ;相当于ax内容乘以32
sar ax,3 ;相当于ax中带符号数除以8
sar ax,8 ;相当于ax中的带符号数除以256
将装在(dx,ax)中的32位数据左移1位,也就是将32位无符号数乘以2
shl ax,1
rcl dx,1 ;将(dx,ax)*2→(dx,ax)
大循环移位指令与移位指令联合使用可以实现双精度数或多倍精度数的左右移位。
将bx中的带符号数除以4,取整,并回送bx中。
mov cl,2 ;移位次数保存在cl寄存器中。
sar bx,cl ;完成(bx)/4bx的运算,取整,不保留余数。
统计bx中1的个数并存入ch寄存器中。用cl寄存器作循环计数。
mov cx,0010h ;(ch)=00h,(cl)=10h
test bx,0ffffh ;测试bx是否为0
jz extbx)=0则退出。
r1: rol bx,1 ;循环左移一位,将bx最高位移入cf
jc count ;cf=1则转移。
jmp r2
count:inc ch ;统计bx中1的个数。
r2: dec clcf=0则循环计数减1
jnz r1重复操作。
ext: ┊
将数组整体右移一位。
ary dd 3 dup(81818181h)
mov esi,0 ;esi是数组的偏移量。
shr ary[esi+8],1 ;将高地址的双字右移一位。
rcr ary[esi+4],1 ;中间的双字循环右移一位。
rcr ary[esi],1 ;低地址的双字循环右移一位。
例:数据段中有一个以src为首地址的字串长度为800,将其传送到附加段中以dst位首地址的缓冲区中。用串传送指令实现。
lea si,src;源串的首地址由si指向。
lea di,dst;目的串的首地址由di指向。
mov bx,800;传送次数送bx寄存器。
cldl:movsw;传送一个字。
dec bx;完成一个字的传送后,传送次数减1
jnz l;判断bx是否为0。不为0,则继续执行串传送指。
令;否则,结束串操作。
如果使用重复前缀,用一条rep movsw指令就可以完成以上800个数据的传送,但这时必须用cx寄存器存放串的长度。
第二章微机操作系统WINDOWS
在资源管理器上,直接拖曳到桌面。在开始菜单中直接拖动程序图标到桌面。12.上下滚动鼠标滚轮,可以自由缩放桌面图标大小。13.排列桌面图标的方式 名称 大小 类型和修改日期。14.或 删除 命令删除入回车站,或用 作永久删除。15.任务栏下拉的三个显示方式 始终合并 隐藏标签 当前任务栏被占满时合并 ...
微机第二章作业
第2章 8051微控制器硬件结构。1.80c51微控制器内ram低128个存储单元划分为哪3个主要部分?各部分主要功能是什么?1.寄存器区。共4组寄存器,每组个存储单,各组以r0 r7作为单元编号。常用于保存操作数及中间结果等。ro一r7也称为通用工作寄存器 占用00h 1fh共32个单元地址。2....
微机原理第二章
2.38086内部结构分为eu与biu两部分,有什么优点?答 biu的功能 同外部总线连接,为eu和内存之间提供信息。eu的功能 从biu的指令队列中获得指令,然后执行该指令。协同工作,完成指令所要求的操作。翻译出 s0,s1和 s2三个状态信号的意义。能产生系统总线或者仅有i o装置的总线控制信号...