1、微机原理第四章讲稿 19第四章 汇编语言程序设计的基本方法 P - 524.1 汇编语言基本概念 P524.1.1 汇编语言与机器语言汇编语言 机器语言ADD AX,02H 0000 01010000 00100000 0000功能:AX 和数 0002 相加,和存放在 AX 中机器语言:用指令的机器码来编写程序,CPU 能直接执行。汇编语言:用助机符和符号来编写程序,再由汇编程序汇编成机器语言程序。4.1.2 汇编语言中语句的组成汇编语言语句格式:名 称空 格:操 作 助 记 符 空 格 操 作 数 ; 注释DATA1 DB 20H,30H,40H ;指示性语句CYCLE:ADD AX,02
2、 ;(AX)(AX)+ 0002 指令性语句 1名称是一个标识符:字符开始,最多 31 个。CYCLE 是一个标号(加冒号) ;DATA1 是一个变量名,其他语句可引用。(多数为标号或变量,也可有别的含义,如常数等)2操作助记符指 令助记符:CPU 能执行的指令。伪指令助记符:控制汇编过程,如 DB、DW 等3操作数由操作助记符要求。可以是操作数本身,也可以是表达式等。4注释程序员的说明,可单独构成一行。4.1.3 汇编语言中的常数和表达式1常数 数值常数 B 表示二进制数: 10110011B D 表示十进制数: 179D 或 179 O 表示八进制数: 263O H 表示十六进制数: 0B
3、3H微机原理第四章讲稿 20 字符串常数:使用单引号 a 例:MOV AL, A2表达式 算术操作符:+、 、/、MOD(取模)等。ADD AL, ;即为 ADD AL,4276MOV AL,79 MOD 16 ;即为 MOV AL,15 逻辑操作符:AND、OR、NOT、XOR 等ADD AL,10101010B AND 00001111B即为:ADD AL,00001010B 关系操作符:EQ(相等) ,EN(不相等) ,LT(小于) ,GT(大于) ,LE(小于等于) ,GE(大于等于) ;如果关系式成立则为全 1,否则为全 0。例:MOV AX,BUF+2 ADD AL,VAL AND
4、 0FH JMP AGAIN+3MOV BL,VB LE VA注意:此处四条不一定全讲书上没有具体解释4.1.4 标号、变量及伪指令1标号(后加冒号)标号是由标识符表示的指令(CPU 指令)的名称用以指示对应的指令的位置。标号的三个属性:段地址(SEG):标号所在段的段地址。偏移地址(OFFSET):标号所在段内的偏移地址。类型:NEAR(-1) 类型表示在段内使用。FAR (-2) 类型表示在段间使用。例:START:PUSH DS ;段寄存器 DS 的内容压入堆栈2变量(不加冒号)1)变量定义(格式)变量名 DB 表达式 ;定义字节变量 变量名 DW 表达式 ;定义字变量变量名 DD 表达
5、式 ;定义双字变量变量名 DO 表达式 ;定义长字变量01:0HDAT120402H10FD05H42301H301H3242H1430H4AT30?0H2T4DAT5DAT6DAT78DAT90H0DAT10?10230450670890AB0CD0EF01:0101230145H0167018901AB01CD01EF01:02H1023H024图 .1 各 变 量 在 内 存 的 存 放微机原理第四章讲稿 21变量名 DT 表达式 ;定义十字节变量例 4.1.4 P57DATA1 DB 20H DB、DW、DD,DQ、DTDATA2 DW 0204H,1000H 定义变量的类型分别为:D
6、ATA3 DB (-1*3) , (15/3) 1、2、4、8、10DATA4 DD 12345H DB、DW、DD 定义变量的类型DATA5 DB 0123 通常称为 BYTE、WORD、DWORDDATA6 DW AB, C, DDATA7 DB ?DATA8 DD ?DATA9 DB 5 DUP (00)DATA10 DW 3 DUP (?) 2)变量的属性 段地址(SEG):变量所在段的段地址。 偏移地址(OFFSET):变量所在段内的偏移地址。 类型(TYPE):每个变量所占的字节数。 长度(LENGTH):第一个 DUP 前的系数,表示变量重复次数;否则为 1。 大小(SIZE):
7、变量所占用的字节数,SIZE = TYPE LENGTH表 42 部分变量的属性 P58变量名 段地址 偏移地址 类型 长度 大小DATA1 0100H 0000H 1 1 1DATA2 0100H 0001H 2 1 2DATA3 0100H 0005H 1 1 1DATA4 0100H 0007H 4 1 4DATA5 0100H 000BH 1 1 1DATA6 0100H 000FH 2 1 2DATA10 0100H 001FH 2 3 64.1.4 属性操作符及表达式1获取属性的操作符 P58操作符 表达式 表达式意义SEG SEG 变量名或标号 取出变量或标号所在段的段地址OFF
8、SET OFFSET 变量名或标号 取出变量或标号在段内的偏移地址TYPE TYPE 变量名或标号 取出变量或标号的类型LENGTH LENGTH 变量名 取出变量的长度微机原理第四章讲稿 22SIZE SIZE 变量名 取出变量的大小例 :P59SEG DATA1 ;结果为 0100HOFFSET DATA1 ;结果为 0000HLENGTH DATA6 ;结果为 1TYPE DATA6 ;结果为 2SIZE DATA9 ;结果为 5例 :P59MOV AX,SIZE DATA9 ;将 DATA9 的大小送 AX MOV AX,5MOV AX,SEG DATA1 ;将 DATA1 的段地址送
9、 AX MOV AX,0100HMOV BL,TYPE DATA6 ;将 DATA9 的类型送 BL MOV BL,2例 :P59DAT1 DB 02HDAT2 DW 0F00HDAT3 DW 5 DUP (?)DAT4 DB LENGTH DAT3 ;在 DAT4 处存放的是 DAT3 的长度(5)DAT5 DW DAT3 ;在 DAT5 处存放的是 DAT3 的偏移地址DAT6 DD DAT3 ;在 DAT6 处存放的是 DAT3 的段地址和偏移地址2PTR 操作:重新定义变量或标号的类型格式:类型 PTR 表达式式中的类型:BYTE,WORD,DWORD(变量) ,DEAR ,FAR(标
10、号)例: MOV DAT3,AL ;由于两者的类型不一致为非法指令MOV BYTE PTR DAT3,AL ;PTR 操作使两者的类型不一致;DAT3 的类型本身没有被改变4.2 8086/8088 指令系统 P59 指令分类: 数据传送指令 算术运算指令 逻辑运算指令 移位指令 标志处理指令和 CPU 控制指令 转移和循环控制指令 调用和返回指令 字符串操作指令微机原理第四章讲稿 23 输入输出指令表 44 指令中将会出现的缩写和符号 P60缩写和符号 意 义 缩写和符号 意 义OPR 操作数 EA 有效地址SRC 源操作数 SEG 段DST 目的操作数 DATA 立即数REG 寄存器 互相
11、交换RSRC 源寄存器 替代RDST 目的寄存器 (X) X 的内容CNT 计数 逻辑与DISP 位移量 逻辑或D8 8 位位移量 逻辑异或D16 16 位位移量 XX 的反码ADDR 地址4.2.1 数据传送指令表 45 数据传送类指令的格式与功能 P61助记符格式 功 能 说 明MOV DST,SRC (DST)(SRC)LEA REG,SRC (REG)(SRC)的有效地址LDS REG,SRC (REG)(SRC) , (DS)(SRC+2)LES REG,SRC (REG)(SRC) , (ES)(SRC+2)LAHF (AH)(FLAG)低 8 位SAHF (FLAG)低 8 位(
12、AH)XCHG OPR1,OPR2 (OPR1)(OPR2)XLAT (AL)(BX)+AL) )PUSH SRC (SP)(SP)-2, (SP)+1:(SP) )(SRC)POP DST (DST)(SP)+1:(SP) ) , (SP)(SP)+2PUSHF (SP)(SP)-2, (SP)+1:(SP) )(FLAG)POPF (FLAG)(SP)+1:(SP) ) , (SP)(SP)+21通用传送指令: MOV DST,SRCSRC 源操作数: 通用寄存器,段寄存器,内存单元和立即数DST 目的操作数:通用寄存器,段寄存器,内存单元,但不能为立即数和 CS IP微机原理第四章讲稿
13、24注意:当目的操作数为段寄存器时,源操作数不能为立即数;当源操作数不为立即数时,两个操作数中必须有一个是寄存器。例 :MOV AX,BX ;(AX)(BX) ,传送一个字MOV AL,DL ;(AL)(DL) ,传送一个字节MOC AX,02 ;(AX) 0002H,传送一个字MOV SI,BX ;(SI)(BX) ) ,传送一个字MOV AL,4DI ;(AL) (DI)+ 4 ) ,传送一个字节MOV AX,BX+2 ;(AX) (BX)+ 2 ) ,传送一个字MOV BXDI,DX ;(BX)+(DI) ) (DX)MOV AL,4DI 指令的操作示意图如图 42(a) P 62例 :
14、假设变量定义如下:DATA1 DW 20H,30HDATA2 DB 50H,60H,70HDATA3 DW 10H DUP(?)传送指令可以有:MOV AX,DATA1MOV DATA3,BXMOV AL,DATA2DIMOV DATA3SI,DXMOV CX,LENGTH DATA3MOV BX,SIZE DATA3MOV SI,OFFSET DATA2注意:两个操作数的类型必须确定,否则不合法(错误)MOV DATA3SI,02 ;对MOV 2SI,AL ;对DI0 01 0 00 10 AL+0 01 DS :04H :30 10 存 储 器图 4.2 指 令 的 传 送 过 程 (a)
15、微机原理第四章讲稿 25MOV 4DI,02 ;错误,类型不确定MOV BYTE PTR 4DI,02 ;对例 :DATA1 DW 05H,15H,20HDATA2 DB 0FH,10H,0AHDATA3 DB 5 DUP (?)MOV AX,BL ;错误MOV AL,DATA1 ;错误MOV BX,DATA3SI ;错误例 :段前缀的使用MOV AX,ES:SI 数据传送的正常通道(图 43 P64)注意:图中共有 n 个传送箭头,能举例说明之! JMP DWORD DICALL DWORD SI2取有效地址指令: LEA REG,SRC功能:是将源操作数 SRC 的有效地址 EA 送入寄存
16、器 REG。注意:REG 不能为段寄存器,SRC 不能为立即数和寄存器。例 :设:(DI)=0500H, (DS)=0200H, (0200H:0510H)=00FFHMOV AX,10HDI ;执行后(AX)= 00FFHLEA AX,10HDI ;执行后(AX)=0510H例 :LEA DI,DATA1LEA BX,AGAIN立即数 AXBCDXSISPBAXBCDXSISPB存储器 DSESIPC1234567 8图 4.3 数 据 传 送 的 正 常 通 道 微机原理第四章讲稿 263取地址指令: LDS REG,SRCLES REG,SRC功能:是将源操作数 SRC 所对应的内存单元
17、中的 32 位数据送 DS/ES 和REG。注意:REG 不能为段寄存器,SRC 不能为立即数和寄存器。例 :TABLE DB 10H,20H,30H,40H,50HPOINT1 DD 02001000HPOINT2 DD TABLE|LDS DI,POINT1 ;(DS)=0200H, (DI)=1000HLES SI,POINT2 ;(ES)= SEG TABLE, (SI)= OFFSET TABLE4标志传送指令 LAHF ;(AH)(FLAG)低 8 位SAHF ;(FLAG)低 8 位(AH)5数据交换指令 XCHG OPR1,OPR2注意:两个操作数中必须有一个是寄存器,不允许同
18、时为段寄存器例 :XCHG AX,BXXCHG AX,2000H6字节转换指令(查表指令)XLAT ;(AL)(BX)+AL ) )例 :TABLE DB 05,08,06DB 04,09,01DB 02,03,00,07MOV AX,SEG TABLEMOV DS,AXMOV BX,OFFSET TABLEMOV AL,05XLATCODE1CODE201234567895864912307TABLE+00581+2+9表 4.6 代 码 转 换 表 4.7 内 存 单 元06409102307微机原理第四章讲稿 27思考题:求 =X.X 二位 BCD 数或 X.XXX 三位 BCD 数如何
19、解决?N7堆栈操作指令堆栈:以后进先出(LIFO)的规则存取信息的一种存储机构(一部分存储器),均为字操作,向下生成。压栈指令:PUSH SRC ;SP)(SP)-2, (SP)+1:(SP) )(SRC)PUSHF出栈指令:POP DST ;(DST)(SP)+1:(SP) ) , (SP)(SP)+2POPF例 : 向下生成 MOV SP,0100HPUSH AXPUSH BXPOP AXPOP BA4.2.2 算术运算指令1加法与减法指令表 4.8 加减法指令的助记符与功能 P69助记符格式 功 能 说 明ADD DST,SRC (DST)(DST)+(SRC)ADC DST,SRC (
20、DST)(DST)+(SRC)+ CSUB DST,SRC (DST)(DST)(SRC)+ CSBB DST,SRC (DST)(DST)(SRC) CNEG DST (DST) 0 (DST) “求补或求负”注意:对二进制代码运算,注意对标志位的影响。例 :ADD AL,BL ADC AX,0ADD CX,08H SBB XC,DATA1S: 01H?BLHAL?S: 0FCH存 储 器微机原理第四章讲稿 28ADD AX,SI NEG AXADD AX,BXDISUB AL,CLSUB BX,DX1)ADD AX,SI 指令执行过程 P702)一个多位数加法程序设:两数 A、B 已由数据
21、定义语句置如内存,A、B 为四字节长度的数据计算:C = A + B ,不考虑进位,和也为四字节长度的数据。 程序如下:MOV AX,SEG ADR1MOV DS,AXLEA DI,ADR1MOV AX,4DIADD AX,DIMOV ADR2,AXMOV AX,6DI54H76+12+7图 4.8 多 位 数 加 法20H219804H75HADR00E170HADR2+2+34+56ADR3ABC0 01 0 0SI 0 10 AX DS :01H :DS :0H0 0 01 01 +0 01 01 0 0 01 0 10AF =1 有 辅 助 进 位S 0 符 号 位 为 0CF = 进 位 位 为 Z 0 结 果 不 为 0OF = 结 果 没 溢 出P 1 结 果 低 八 位 1的 个 数 为 偶 数存 储 器图 4.3 AD X, SI执 行 过 程 P 70 CFPFAFZFSTFIDFO D01D23D45D67D89101121314D15 01100 XXXXX