汇编语言程序设计的基本方法P52Word文档格式.docx
- 文档编号:19676923
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:80
- 大小:486.23KB
汇编语言程序设计的基本方法P52Word文档格式.docx
《汇编语言程序设计的基本方法P52Word文档格式.docx》由会员分享,可在线阅读,更多相关《汇编语言程序设计的基本方法P52Word文档格式.docx(80页珍藏版)》请在冰豆网上搜索。
LT(小于),GT(大于),
LE(小于等于),GE(大于等于);
如果关系式成立则为全1,否则为全0。
例:
MOVAX,BUF+2
ADDAL,VALAND0FH
JMPAGAIN+3
MOVBL,VBLEVA
注意:
此处四条不一定全讲书上没有具体解释
4.1.4标号、变量及伪指令
1.标号(后加冒号)
标号是由标识符表示的指令(CPU指令)的名称
用以指示对应的指令的位置。
标号的三个属性:
段地址(SEG):
标号所在段的段地址。
偏移地址(OFFSET):
标号所在段内的偏移地址。
类型:
NEAR(-1)类型表示在段内使用。
FAR(-2)类型表示在段间使用。
START:
PUSHDS
;
段寄存器DS的内容压入堆栈
2.变量(不加冒号)
1)变量定义(格式)
变量名DB表达式;
定义字节变量
变量名DW表达式;
定义字变量
变量名DD表达式;
定义双字变量
变量名DO表达式;
定义长字变量
变量名DT表达式;
定义十字节变量
例4.1.4P57
DATA1DB20HDB、DW、DD,DQ、DT
DATA2DW0204H,1000H定义变量的类型分别为:
DATA3DB(-1*3),(15/3)1、2、4、8、10
DATA4DD12345HDB、DW、DD定义变量的类型
DATA5DB‘0123’通常称为BYTE、WORD、DWORD
DATA6DW‘AB’,‘C’,‘D’
DATA7DB?
DATA8DD?
DATA9DB5DUP(00)
DATA10DW3DUP(?
)
2)变量的属性
变量所在段的段地址。
变量所在段内的偏移地址。
类型(TYPE):
每个变量所占的字节数。
长度(LENGTH):
第一个DUP前的系数,表示变量重复次数;
否则为1。
大小(SIZE):
变量所占用的字节数,SIZE=TYPE×
LENGTH
表4.2部分变量的属性P58
变量名
段地址
偏移地址
类型
长度
大小
DATA1
0100H
0000H
1
DATA2
0001H
2
DATA3
0005H
DATA4
0007H
4
DATA5
000BH
DATA6
000FH
DATA10
001FH
3
6
4.1.4属性操作符及表达式
1.获取属性的操作符P58
操作符
表达式
表达式意义
SEG
SEG变量名或标号
取出变量或标号所在段的段地址
OFFSET
OFFSET变量名或标号
取出变量或标号在段内的偏移地址
TYPE
TYPE变量名或标号
取出变量或标号的类型
LENGTH变量名
取出变量的长度
SIZE
SIZE变量名
取出变量的大小
例
:
P59
SEGDATA1;
结果为0100H
OFFSETDATA1;
结果为0000H
LENGTHDATA6;
结果为1
TYPEDATA6;
结果为2
SIZEDATA9;
结果为5
MOVAX,SIZEDATA9;
将DATA9的大小送AXMOVAX,5
MOVAX,SEGDATA1;
将DATA1的段地址送AXMOVAX,0100H
MOVBL,TYPEDATA6;
将DATA9的类型送BLMOVBL,2
DAT1DB02H
DAT2DW0F00H
DAT3DW5DUP(?
)
DAT4DBLENGTHDAT3;
在DAT4处存放的是DAT3的长度(5)
DAT5DWDAT3;
在DAT5处存放的是DAT3的偏移地址
DAT6DDDAT3;
在DAT6处存放的是DAT3的段地址和偏移地址
2.PTR操作:
重新定义变量或标号的类型
格式:
类型PTR表达式
式中的类型:
BYTE,WORD,DWORD(变量),DEAR,FAR(标号)
MOVDAT3,AL;
由于两者的类型不一致为非法指令
MOVBYTEPTRDAT3,AL;
PTR操作使两者的类型不一致
DAT3的类型本身没有被改变
4.28086/8088指令系统P59
指令分类:
数据传送指令
⑵算术运算指令
⑶逻辑运算指令
⑷移位指令
⑸标志处理指令和CPU控制指令
⑹转移和循环控制指令
⑺调用和返回指令
⑻字符串操作指令
⑼输入输出指令
表4.4指令中将会出现的缩写和符号P60
缩写和符号
意义
OPR
操作数
EA
有效地址
SRC
源操作数
段
DST
目的操作数
DATA
立即数
REG
寄存器
←→
互相交换
RSRC
源寄存器
←
替代
RDST
目的寄存器
(X)
X的内容
CNT
计数
∧
逻辑与
DISP
位移量
∨
逻辑或
D8
8位位移量
逻辑异或
D16
16位位移量
X的反码
ADDR
地址
4.2.1数据传送指令
表4.5数据传送类指令的格式与功能P61
助记符格式
功能说明
MOVDST,SRC
(DST)←→(SRC)
LEAREG,SRC
(REG)←(SRC)的有效地址
LDSREG,SRC
(REG)←(SRC),(DS)←(SRC+2)
LESREG,SRC
(REG)←(SRC),(ES)←(SRC+2)
LAHF
(AH)←(FLAG)低8位
SAHF
(FLAG)低8位←(AH)
XCHGOPR1,OPR2
(OPR1)←→(OPR2)
XLAT
(AL)←((BX)+AL))
PUSHSRC
(SP)←(SP)-2,((SP)+1:
(SP))←(SRC)
POPDST
(DST)←((SP)+1:
(SP)),(SP)←(SP)+2
PUSHF
(SP))←(FLAG)
POPF
(FLAG)←((SP)+1:
1.通用传送指令:
MOVDST,SRC
SRC源操作数:
通用寄存器,段寄存器,内存单元和立即数
DST目的操作数:
通用寄存器,段寄存器,内存单元,但不能为立即数和CSIP
当目的操作数为段寄存器时,源操作数不能为立即数;
当源操作数不为立即数时,两个操作数中必须有一个是寄存器。
例①:
MOVAX,BX;
(AX)←(BX),传送一个字
MOVAL,DL;
(AL)←(DL),传送一个字节
MOCAX,02;
(AX)←0002H,传送一个字
MOVSI,[BX];
(SI)←((BX)),传送一个字
MOVAL,4[DI];
(AL)←((DI)+4),传送一个字节
MOVAX,[BX+2];
(AX)←((BX)+2),传送一个字
MOV[BX][DI],DX;
((BX)+(DI))←(DX)
MOVAL,4[DI]指令的操作示意图如图4.2(a)P62
例②:
假设变量定义如下:
DATA1DW20H,30H
DATA2DB50H,60H,70H
DATA3DW10HDUP(?
传送指令可以有:
MOVAX,DATA1
MOVDATA3,BX
MOVAL,DATA2[DI]
MOVDATA3[SI],DX
MOVCX,LENGTHDATA3
MOVBX,SIZEDATA3
MOVSI,OFFSETDATA2
两个操作数的类型必须确定,否则不合法(错误)
MOVDATA3[SI],02;
对
MOV2[SI],AL;
MOV4[DI],02;
错误,类型不确定
MOVBYTEPTR4[DI],02;
例③:
DATA1DW05H,15H,20H
DATA2DB0FH,10H,0AH
DATA3DB5DUP(?
MOVAX,BL;
错误
MOVAL,DATA1;
MOVBX,DATA3[SI];
例④:
段前缀的使用
MOVAX,ES:
[SI]
●数据传送的正常通道(图4.3P64)
注意:
图中共有n个传送箭头,能举例说明之!
⑦JMPDWORD[DI]
CALLDWORD[SI]
2.取有效地址指令:
LEAREG,SRC
是将源操作数SRC的有效地址EA送入寄存器REG。
REG不能为段寄存器,SRC不能为立即数和寄存器。
设:
(DI)=0500H,(DS)=0200H,(0200H:
0510H)=00FFH
MOVAX,10H[DI];
执行后(AX)=00FFH
LEAAX,10H[DI];
执行后(AX)=0510H
LEADI,DATA1
LEABX,AGAIN
3.取地址指令:
LDSREG,SRC
LESREG,SRC
功能:
是将源操作数SRC所对应的内存单元中的32位数据送DS/ES和REG。
TABLEDB10H,20H,30H,40H,50H
POINT1DD02001000H
POINT2DDTABLE
|
LDSDI,POINT1;
(DS)=0200H,(DI)=1000H
LESSI,POINT2;
(ES)=SEGTABLE,(SI)=OFFSETTABLE
4.标志传送指令
LAHF;
SAHF;
5.数据交换指令XCHGOPR1,OPR2
注意:
两个操作数中必须有一个是寄存器,不允许同时为段寄存器
XCHGAX,BX
XCHGAX,[2000H]
6.字节转换指令(查表指令)
XLAT;
TABLEDB05,08,06
DB04,09,01
DB02,03,00,07
‖
MOVAX,SEGTABLE
MOVDS,AX
MOVBX,OFFSETTABLE
MOVAL,05
XLAT
思考题:
求
=X.X二位BCD数或X.XXX三位BCD数如何解决?
7.堆栈操作指令
堆栈:
以后进先出(LIFO)的规则存取信息的一种存储机构(一部分存储器),
均为字操作,向下生成。
压栈指令:
PUSHSRC;
SP)←(SP)-2,((SP)+1:
出栈指令:
POPDST;
向下生成
MOVSP,0100H
PUSHAX
PUSHBX
POPAX
POPBA
4.2.2算术运算指令
1.加法与减法指令
表4.8加减法指令的助记符与功能P69
ADDDST,SRC
(DST)←(DST)+(SRC)
ADCDST,SRC
(DST)←(DST)+(SRC)+C
SUBDST,SRC
(DST)←(DST)—(SRC)+C
SBBDST,SRC
(DST)←(DST)—(SRC)—C
NEGDST
(DST)←0—(DST)“求补或求负”
对二进制代码运算,注意对标志位的影响。
ADDAL,BLADCAX,0
ADDCX,08HSBBXC,DATA1
ADDAX,[SI]NEGAX
ADDAX,[BX][DI]
SUBAL,CL
SUB[BX],DX
1)ADDAX,[SI]指令执行过程P70
2)一个多位数加法程序
两数A、B已由数据定义语句置如内存,
A、B为四字节长度的数据
计算:
C=A+B,不考虑进位,和也为
四字节长度的数据。
程序如下:
MOVAX,SEGADR1
MOVDS,AX
LEADI,ADR1
MOVAX,4[DI]
ADDAX,[DI]
MOVADR2,AX
MOVAX,6[DI]
ADCAX,2[DI]
MOVAFR2+2,AX
实际:
00127654H+00049821H=00170E75H
考虑:
数据带不带符号?
2.比较指令P73
CMPDST,SRC;
(DST)-(SRC)影响标志(不生成结果)
CMPAL,BL
CMPAX,06H
3.增量和减量指令(表4.9P74)
INCDST;
(DST)←(DST)+1
DECDST;
(DST)←(DST)-1
不影响CF标志(其他要影响的!
);
全1增量为全0;
全0减量为全1。
INCWORDPTR4[BX]
DECCX
4.乘法和除法指令P74
表4.10乘法除法指令助记符与功能P74
IMULSRC
(带符号数乘法)
字节运算:
(AX)←(AL)×
(SRC)
字运算:
(DX:
AX)←(AX)×
MULSRC
(不带符号数乘法)
同IMUL,不带符号
IDIVSRC
(带符号数除法)
(AL)←(AX)/(SRC)的商
(AH)←(AX)/(SRC)的余数
(AX)←(DX:
AX)/(SRC)的商
(DX)←(DX:
AX)/(SRC)的余数
DIVSRC
(不带符号数除法)
同IDIV,不带符号
①无符号数相乘后结果的高位字节(或字)为全0,或符号数相乘结果的高位字节(或字)仅为低位字节(或字)的符号扩展,则CF=OF=0,否则CF=OF=1。
其他标志位不影响。
②除法运算若发生除数为0或商溢出,则其结果无意义,并引起中断。
DAT1为字变量P75
MULDAT1;
(DAT1)
IMULCL;
(CL)带符号数
MULBYTEPTR[BX];
((BX))
P75
DTA1DW8004H;
此处代码可有不同的解释
︱
1)MOVAX,05H;
(0005H)×
8004H=00028014H
MULDAT1;
结果在DX:
AX中
︱;
(DX)=0002H,(AX)=8014H
2)MOVAX,05H;
(05H)×
04H=0014H
MULBYTEPTRDAT1;
结果在AX中(AX)=0014H
︱
3)MOVAX,05H;
IMULBYTEPTRDAT1;
结果在AX中,也可看作两个无
(两个很小的正数)
4)MOVAX,05H;
8004H=FFFD8014H
IMULWORDPTRDAT1;
正数负数负数
4)解为:
8004H=1000000000000100B为负数(补码)
0111111111111011B求反
0111111111111100B加1(求得绝对值)
7FFCH用十六进制表示
×
0005H与正5相乘
00027FECH商的绝对值
00000000000000100111111111101100B商的绝对值(二进制数)11111111111111011000000000010011B商的绝对值求反
11111111111111011000000000010100B求反加1得补码
FFFD8014H十六进制表示
结果:
(DX)=FFFDH;
(AX)=8014H
5.符号扩展指令P76
表4.11符号扩展指令助记符与功能P76
CBW
将AL中的符号扩展到AH中
将一个字节长度的带符号数扩展为一个字长度,值不变
CWD
将AX中的符号扩展到DX中
将一个字长度的带符号数扩展为双字长度,值不变
符号扩展意义:
一个带符号数长度发生了变化,但值没变。
寻址方式是隐含的,一定是AL或AX。
思考:
将一个带符号数变短:
高字节是低位的符号扩展,则高字节可舍去!
6.BCD数调整指令
表4.12BCD数调整指令助记符与功能P76
AAA
加法分离BCD调整,影响AF、CF,其余无定义
AAS
减法分离BCD调整,影响AF、CF,其余无定义
DAA
加法组合BCD调整,OF无定义,影响其余标志位
DAS
减法组合BCD调整,OF无定义,影响其余标志位
AAM
乘法分离BCD调整,影响S,Z,P;
O,C,AF无定义
AAD
例4.2.1求两个4位组合BCD数的和P77
设变量定义如下:
BCD1DB45H,19H;
BCD1=1945
BCD2DB71H,12H;
BCD2=1271
BCD3DB2DUP(?
);
存和=3216
表4.13程序及运算结果
程序
结果
AL
AF
CF
BCD3
BCD3+1
MOVAL,BCD1
45H
·
?
ADDAL,BCD2
B6H
16H
MOVBCD3,AL
MOVAL,BCD1+1
19H
ADCAL,BCD2+1
2CH
32H
MOVBCD3+1,AL
例4.2.2设有两数X、Y,且X=85,Y=6,用分离BCD数完成X/Y与X×
Y
BCD1DB05H,08H
BCD2DB06H
BCD3DB3DUP(?
X/Y程序如下:
P77
MOVAH,0
MOVAL,BCD1+1;
(AL)=08
MOVBL,BCD2;
(BL)=06
DIVBL;
(AX)/(BL)→(AL)=01,(AH)=02余数
MOVBCD3+1,AL;
商高位送BCD3+1
MOVAL,BCD1;
(AL)=05
AAD;
(AL)=(AH)×
10+(AL)=25,0→(AH)
(AX)/(BL)→(AL)=04,(AH)=01
MOVBCD3,AL;
商低位送BCD3
MOVBCD3+2,AH;
商低位送BCD3+2
X×
Y程序如下:
P78
MULBCD2;
(AL)×
(BCD2)→(AX),AX=001EH
AAM;
(AX)=0300H
MOVWORDPTRBCD3,AX;
(BCD3)=00,(BCD3+1)=03
(AL)=08
(BCD2)→(AX),AX=0030H
(AX)=0408H
ADDAL,BCD3+1;
(AL)=0BH
AAA;
(AL)=01H,(AH)=05
MOVWORDPTRBCD3+1,AX;
(BCD3+2)=05,(BCD3+1)=01,
(BCD3)=00
4.2.3逻辑运算类指令P78
表4.14逻辑运算指令助记符与功能P78
ANDDST,SRC
(DST)=(DST)∧(SRC)
ANDDST,DATA
(DST)=(DST)∧DATA
ORDST,SRC
(DST)=(DST)∨(SRC)
ORDST,DATA
(DST)=(DST)∨DATA
XORDST,SRC
(DST)=(DST)
XORDST,DATA
(DST)=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 程序设计 基本 方法 P52