第2章 8086微处理器与汇编语言;学习目标;教学内容;数据传送类指令;指令系统;把一个字节或字的操作数从源地址传送至目的地址。;mov cl,4 ;cl←4,字节传送
mov dx,0ffh ;dx←00ffh,字传送
mov si,200h ;si←0200h,字传送
mov bvar,0ah ;字节传送
假设bvar是一个字节变量,定义如下:bvar db 0
mov wvar,0bh ;字传送
假设wvar是一个字变量,定义如下:wvar dw 0;mov ah,al ;ah←al,字节传送
mov bvar,ch ;bvar←ch ,字节传送
mov ax,bx ;ax←bx,字传送
mov ds,ax ;ds←ax,字传送
mov [bx],al ;[bx]←al,字节传送;mov al,[bx] ;al←ds:[bx]
mov dx,[bp] ;dx←ss:[bp+0]
mov dx,[bp+4] ;dx←ss:[bp+4]
mov es,[si] ;es←ds:[si];mov [si],ds
mov ax,ds ;ax←ds
mov es,ax ;es←ax←ds;MOV指令也并非任意传送!;在绝大多数双操作数指令中,目的操作数和源操作数必须具有一致的数据类型,或者同为字量,或者同为字节量,否则为非法指令。
MOV AL, 050AH ;非法指令,修正:
;mov ax,050ah
MOV SI, DL ;非法指令,修正:
;mov dh,0
;mov si,dx;当无法通过任一个操作数确定是操作类型时,需要利用汇编语言的操作符显式指明。
MOV [BX+SI], 255 ;非法指令,修正:
;mov byte ptr [bx+si], 255
;byte ptr 说明是字节操作
;mov word ptr [bx+si], 255
;word ptr 说明是字操作;8088指令系统除串操作指令外,不允许两个操作数都是存储单元(存储器操作数)。
MOV buf2, buf1 ;非法指令,修正:
;假设buf2和buf1是两个字变量
;mov ax,buf1
;mov buf2,ax
;假设buf2和buf1是两个字节变量
;mov al,buf1
;mov buf2,al;8088指令系统中,能直接对段寄存器操作的指令只有MOV等个别传送指令,并且不灵活。
MOV DS, ES ;非法指令,修正:
;mov ax,es
;mov ds,ax
MOV DS, 100H ;非法指令,修正:
;mov ax,100h
;mov ds,ax
MOV CS, [SI] ;非法指令,修正:
;CS不能作为目的操作数;交换指令XCHG;mov ax,1199h ;ax=1199h
xchg ah,al ;ax=9911h
;等同于 xchg al,ah
mov wvar,5566h ;wvar是一个字量变量
xchg ax,wvar ;ax=5566h,wvar=9911h
;等同于 xchg wvar,ax
xchg al,byte ptr wvar+1
;ax=5599h,wvar=6611h
;“byte ptr wvar+1”强制为字节量,只取高字节与
AL类型交换,否则数据类型不匹配;换码指令XLAT(translate);堆栈操作指令;标志传送指令;标志寄存器出入堆栈指令
标志进栈
标志出栈;地址传送指令;指针传送指令
LDS指令
将主存中mem指定的字送至r16,并将mem的下一字送DS寄存器。
LES指令
将主存中mem指定的字送至r16,并将mem的下一字送ES寄存器。
;算术运算类指令;加法类指令;带进位加法指令ADC
将源与目的操作数相加,再加上进位CF标志,结果送到目的操作数。;例:用汇编语言实现多字节加法。
计算:0234 4652H+F0F0 F0F0H=? ;增量指令INC
对操作数加1(增量);减法指令SUB
SUB指令将目的操作数减去源操作数,结果送到目的操作数。;带借位减法指令SBB
SBB指令将目的操作数减去源操作数,再减去借位CF(进位),结果送到目的操作数。;取负指令;比较指令;常利用其对标志位的影响,后接跳转指令完成分支结构。;乘法类指令;带符号数乘法
字节乘法;乘法指令如下影响OF和CF标志:
MUL指令:若乘积的高一半(AH或DX)为0,则OF=CF=0;否则OF=CF=1。
IMUL指令:若乘积的高一半是低一半的符号扩展,则OF=CF=0;否则均为1。
乘法指令对其他状态标志未定义。;例题: 无符号乘法MUL;例题: 有符号乘法 IMUL;除法类指令;有符号数除法
字节除法;除
原创力文档

文档评论(0)