1、微 型 计 算 机 原 理 第 四 章 8x86指 令 系 统2010年 6月 30日 Wednesday 56 例 要 求 计 算 两 个 十 进 制 数 之 和 , 例 要 求 计 算 两 个 十 进 制 数 之 和 , 7 8 ? 。 ? 。可 用 以 下 指 令 实 现 :可 用 以 下 指 令 实 现 : (非 压 缩 型非 压 缩 型 BCD码 调 整码 调 整 )MOV AX, 0007H ;(AL)=07H,(AH)=00HMOV BL, 08H ;(BL)=08HADD AL, BL ;(AL)=0FHAAA ;(AL)=05H,(AH)=01H;(CF)=(AF)=1(压
2、缩 型压 缩 型 BCD码 调 整码 调 整 )MOV AX, 0007H ;(AL)=07H,(AH)=00HMOV BL, 08H ;(BL)=08HADD AL, BL ;(AL)=0FHDAA ;(AL)=15H,(AH)=00H;(CF)=0,(AF)=1微 型 计 算 机 原 理 第 四 章 8x86指 令 系 统2010年 6月 30日 Wednesday 57 例 要 求 计 算 两 个 十 进 制 数 之 和 , 例 要 求 计 算 两 个 十 进 制 数 之 和 , 56 34 ? 。 ? 。可 用 以 下 指 令 实 现 :可 用 以 下 指 令 实 现 : (压 缩 型
3、压 缩 型 BCD码 调 整码 调 整 )MOV AX, 3456H ;(AL)=56H,(AH)=34HADD AL, AH ;(AL)=8AHDAA ;(AL)=90H 例 要 求 计 算 两 个 例 要 求 计 算 两 个 BCD数 的数 的 ASCII码 之 和 , 即码 之 和 , 即5 9 ? 。 可 用 以 下 指 令 实 现 : ? 。 可 用 以 下 指 令 实 现 : (ASCII码 调 整码 调 整 )MOV AL, 5 ;(AL)=35HADD AL, 9 ;39H,(AL)=6EHMOV AH, 0 ;(AH)=00HAAA ;(AH)=01H,(AL)=04HOR
4、AX,3030H ;(AX)=3134H,即即 34微 型 计 算 机 原 理 第 四 章 8x86指 令 系 统2010年 6月 30日 Wednesday 60 例 要 求 计 算 两 个 十 进 制 数 之 差 , 例 要 求 计 算 两 个 十 进 制 数 之 差 , 86-7 ? 。 ? 。可 用 以 下 指 令 实 现 :可 用 以 下 指 令 实 现 : (非 压 缩 型非 压 缩 型 BCD码码 )MOV AX, 0806H ;(AH)=08H,(AL)=06HSUB AL, 07H ;(AX)=08FFHAAS ;(AX)=0709H 例 要 求 计 算 两 个 十 进 制
5、数 之 差 , 例 要 求 计 算 两 个 十 进 制 数 之 差 , 134-56 ? 。 ? 。可 用 以 下 指 令 实 现 :可 用 以 下 指 令 实 现 : (压 缩 型压 缩 型 BCD码码 )MOV AX, 5634H ;(AH)=56H,(AL)=34HSUB AL, AH ;(AL)=DEH,有 借 位有 借 位DAS ;(AL)=78H微 型 计 算 机 原 理 第 四 章 8x86指 令 系 统2010年 6月 30日 Wednesday 62AAM指 令 的 操 作 为 :指 令 的 操 作 为 : (将 二 进 制 数 转 换 成 十 进 制 数将 二 进 制 数
6、转 换 成 十 进 制 数 )(AH) (AL)/0AH的 商 ; 即的 商 ; 即 AL除 以除 以 10, 商 送, 商 送 AH(AL) (AL)/0AH的 余 ; 即的 余 ; 即 AL除 以除 以 10,余 数 送余 数 送 AL例 : 要 求 进 行 以 下 十 进 制 乘 法 运 算 :例 : 要 求 进 行 以 下 十 进 制 乘 法 运 算 : 79 ? ?解 : 可 编 程 序 段 如 下 :解 : 可 编 程 序 段 如 下 :MOV AL, 07H ; (AL)=07HMOV BL, 09H ; (BL)=09HMUL BL ; (AX)=07H09H=003FHAAM
7、 ; (AH)=06H, (AL)=03H 微 型 计 算 机 原 理 第 四 章 8x86指 令 系 统2010年 6月 30日 Wednesday 65AAD指 令 的 操 作 为 :指 令 的 操 作 为 : (十 进 制 数 转 换 成 二 进 制 数十 进 制 数 转 换 成 二 进 制 数 )(AL) (AH)0AH+(AL)(AH) 0例 : 要 进 行 以 下 十 进 制 除 法 运 算 :例 : 要 进 行 以 下 十 进 制 除 法 运 算 : 732=?解 : 可 编 程 序 段 如 下 :解 : 可 编 程 序 段 如 下 :MOV AH, 07H ; (AH)=07H
8、MOV AL, 03H ; (AL)=03HMOV BL, 02H ; (BL)=02HAAD ; (AL)=49H(即 十 进 制 数即 十 进 制 数 73)DIV BL ; (AL)=24H(商商 ),(AH)=01H(余 数余 数 )AAM ; (AH)=03H, (AL)=06H微 型 计 算 机 原 理 第 四 章 8x86指 令 系 统2010年 7月 1日 Thursday 72使 用 举 例使 用 举 例例 一例 一 利 用 循 环 移 位 指 令 可 以 对 寄 存 器 或利 用 循 环 移 位 指 令 可 以 对 寄 存 器 或存 储 器 中 的 任 一 位 进 行 测
9、试 。 如 要 测 试存 储 器 中 的 任 一 位 进 行 测 试 。 如 要 测 试 AL寄 存 器寄 存 器中 的 第中 的 第 5位 的 状 态 是位 的 状 态 是 “0”还 是还 是 “1”, 则 可 利 用 以 下, 则 可 利 用 以 下指 令 实 现 :指 令 实 现 : MOV CL, 5 ; (CL)移 位 次 数移 位 次 数ROR AL, CL ; (CF)AL的 第的 第 5位位JNC ZERO ; 若; 若 (CF)=0,转转 ZARO ; 否 则; 否 则 ZERO: 微 型 计 算 机 原 理 第 五 章 汇 编 语 言 程 序 设 计2010年 7月 1日
10、Thursday 6例 一 编 程 实 现 c=a+b, 并 在 屏 幕 上 显 示 结 果解 1: 用 C语 言 实 现#include “stdio.h“int main(int argc, char* argv) int a,b,c;a=1; b=2;c=a+b;printf(“c=%dn“,c);return 0; 编 译 后 的 目 标 文编 译 后 的 目 标 文件 达 到件 达 到 3.59KB微 型 计 算 机 原 理 第 五 章 汇 编 语 言 程 序 设 计2010年 7月 1日 Thursday 7data segmenta db ?b db ?c db ?string
11、db c=$data endscode segmentmain proc farassume cs:code, ds:dataassume es:datastart:push dssub ax,axpush axmov ax,datamov ds,axmov es,axmov a,1mov b,2mov al,aadd al,bmov c,allea dx,stringmov ah,09int 21hadd c,30hmov dl,cmov ah,2int 21hmov dl,0ahint 21hmov dl,0dhint 21hretmain endpcode endsend start解
12、2: 用 汇 编 语 言 实 现汇 编 后 的 目汇 编 后 的 目标 文 件 只 有标 文 件 只 有208字 节字 节微 型 计 算 机 原 理 第 五 章 汇 编 语 言 程 序 设 计2010年 7月 1日 Thursday 8汇 编 语 言 源 程 序 的 格 式、 、 、 、 、 、 、 、 、 、 、 、 、 S=3B74AC60F8H+20D59E36C1HF8H60HACH74H3BHC1H36H9EHD5H20H、 、 、 、 、 、DATA1DATA2微 型 计 算 机 原 理 第 五 章 汇 编 语 言 程 序 设 计2010年 7月 1日 Thursday 9CODE
13、 SEGMENTASSUME CS: CODE, DS: DATA START: MOV AX, DATAMOV DS, AX MOV CX, 5 MOV SI, 0 CLC LOOPER: MOV AL, DATA2SI ADC DATA1SI, AL INC SI DEC CX JNZ LOOPERMOV AH, 4CH INT 21HCODE ENDSEND STARTDATA SEGMENTDATA1 DB 0F8H, 60H, 0ACH, 74H, 3BHDATA2 DB 0C1H, 36H, 9EH, 0D5H, 20H DATA ENDS微 型 计 算 机 原 理 第 五 章 汇
14、 编 语 言 程 序 设 计2010年 7月 1日 Thursday 10汇 编 语 言 源 程 序 的 组 织 结 构汇 编 语 言 源 程 序 的 组 织 结 构汇 编 语 言 源 程 序 采 用 的 是 分 段 结 构 , 即 一 个 汇 编 语汇 编 语 言 源 程 序 采 用 的 是 分 段 结 构 , 即 一 个 汇 编 语言 源 程 序 由 若 干 段 组 成 ( 一 般 由 数 据 段 和 代 码 段 组言 源 程 序 由 若 干 段 组 成 ( 一 般 由 数 据 段 和 代 码 段 组成 ) , 每 一 个 段 以成 ) , 每 一 个 段 以 SEGMENT语 句 开 始
15、 , 以语 句 开 始 , 以 ENDS语 句语 句结 束结 束 ,整 个 程 序 的 结 尾 是整 个 程 序 的 结 尾 是 END语 句 。语 句 。在 代 码 段 中 下 面 的 内 容 是 不 可 缺 少 的 :在 代 码 段 中 下 面 的 内 容 是 不 可 缺 少 的 :(1) 定 义 段 ( 使 用定 义 段 ( 使 用 SEGMENT/ENDS语 句 定 义 )语 句 定 义 )(2) 约 定 段 寄 存 器 和 段 的 关 系 ( 即 物 理 段 和 逻 辑约 定 段 寄 存 器 和 段 的 关 系 ( 即 物 理 段 和 逻 辑段 的 关 系 , 使 用 一 个 或 多
16、 个段 的 关 系 , 使 用 一 个 或 多 个 ASSUME语 句 实 现 )语 句 实 现 )(3) 装 填 段 寄 存 器 ( 只 装 填 数 据 型 段 寄 存 器 )装 填 段 寄 存 器 ( 只 装 填 数 据 型 段 寄 存 器 )(4) 设 置 返 回设 置 返 回 DOS的 方 法的 方 法微 型 计 算 机 原 理 第 五 章 汇 编 语 言 程 序 设 计2010年 7月 1日 Thursday 11例 如 :例 如 :MYDARA SEGMENT ; 、 、 、 、 、 、 、 、 、 ; 、 、 、 、MYDATA ENDS ; 、 、 、 、 、 、 、 、 、M
17、YCODE SEGMENT ; 、 、 、 、 、 、 、 、 、ASSUME CS:MYCODE,DS:MYDATA ; 、 、 、 、 、 、 、 、 、 、 、START:MOV AX,MYDATA ; 、 、 、 、 、 、 、 、 、MOV DS,AX ; 、 、 、 、 、 、 、 、 、 、MOV AH,4CH ; 、 、 、 、 DOSINT 21HMYCODE ENDS ; 、 、 、 、 、 、 、 、 、END START ; 、 、 、 、微 型 计 算 机 原 理 第 五 章 汇 编 语 言 程 序 设 计2010年 7月 1日 Thursday 25DATA SEG
18、MENTNUM DB 82H,68H,88HSUM DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV BX,OFFSET NUMMOV AL,BXINC BXADD AL,BXINC BXADD AL,BXMOV SUM,ALMOV AH,4CHINT 21HCODE ENDSEND START例 :微 型 计 算 机 原 理 第 五 章 汇 编 语 言 程 序 设 计2010年 7月 1日 Thursday 272.用 户 程 序 的 装 入用 户 程 序 的 装 入完 成 以 下 操
19、作 :完 成 以 下 操 作 :、 确 定 内 存 可 用 部 分确 定 内 存 可 用 部 分以 便 存 放 要 执 行 的以 便 存 放 要 执 行 的 .exe 文 件 。文 件 。、 建 立 程 序 段 前 缀建 立 程 序 段 前 缀 PSP( Program Segment Prefix) 程 序 段 前 缀 大 小程 序 段 前 缀 大 小 100H,即即 256个 字 节 。个 字 节 。 存 放 执 行 过 程 中 的 控 制 信 息 。存 放 执 行 过 程 中 的 控 制 信 息 。 PSP最 开 始 的 两 个 字 节最 开 始 的 两 个 字 节 CD20,是 一 条
20、是 一 条 INT 20H指 令 。指 令 。、 装 入 可 执 行 程 序装 入 可 执 行 程 序 .exeSPDS、 ES代 码 段INT 20H数 据 段CS:IPSSPSP(256字 节 )用 户 程 序没 有 定 义 堆 栈 段 的 用 户 程 序 装 入 情 况SPDS、 ES INT 20H数 据 段代 码 段堆 栈 段CS:IPSS用 户 程 序定 义 了 堆 栈 段 的 用 户 程 序 装 入 情 况附 加 段PSP(256字 节 )微 型 计 算 机 原 理 第 五 章 汇 编 语 言 程 序 设 计2010年 7月 1日 Thursday 28DSEG SEGMENTS
21、TRING1 DB 1,2,3,4,5DSEG ENDSESEG SEGMENTSTRING2 DB ?ESEG ENDSSSEG SEGMENT STACK STACKDW 10 DUP(?)TOP LABEL WORDSSEG ENDSCSEG SEGMENTASSUME CS:CSEG,DS:DSEGASSUME ES:ESEG,SS:SSEGSTART: MOV AX,DSEGMOV DS,AXMOV AX,ESEGMOV ES,AXMOV AX,SSEGMOV SS,AXMOV SP,OFFSET TOPLEA SI,STRING1LEA DI,STRING2MOV CX,5CLDR
22、EP MOVSBMOV AH,4CHINT 21HCSEG ENDSEND START采取了以上措施之后,程序在返回 DOS 的时候,执行一条 RET 指令即可返回 DOS。因为这条 RET 指令是远过程中的 RET 指令,它将从栈顶弹出四个字节,即把 PSP 首单元的逻辑地址反弹到 CS:IP 之中,于是 CPU 就自动从 PSP 首单元取出 INT 20H,执行它返回DOS。微 型 计 算 机 原 理 第 五 章 汇 编 语 言 程 序 设 计2010年 7月 1日 Thursday 32例 : DATA SEGMENTNUM DB 82H,68H,88HSUM DB ?DATA ENDS
23、CODE SEGMENTMAIN PROC FARASSUME CS:CODE,DS:DATASTART: PUSH DSXOR AX,AXPUSH AXMOV AX,DATAMOV DS,AXLEA BX, NUMMOV AL,BXINC BXADD AL,BXINC BXADD AL,BXMOV SUM,ALRETMAIN ENDPCODE ENDSEND START微 型 计 算 机 原 理 第 五 章 汇 编 语 言 程 序 设 计2010年 7月 1日 Thursday 40例例 从 键 盘 输 入 一 串 字 符 , 个 数 小 于从 键 盘 输 入 一 串 字 符 , 个 数 小
24、 于 50其 程 序 设 计 方 法 是 :其 程 序 设 计 方 法 是 :DATA SEGMENTBUF DB 50DB ?DB 50 DUP(?)DATA ENDSCODE SEGMENT MOV AX,DATAMOV DS,AXLEA DX, BUFMOV AH, 10INT 21HCODE ENDS50BUF 、 、 、 、 、 、 、 、 、微 型 计 算 机 原 理 第 五 章 汇 编 语 言 程 序 设 计2010年 7月 1日 Thursday 41INT 21H 常 用 功 能 介 绍( 4) 字 符 串 显 示 () 字 符 串 显 示 ( 9 # 功 能 )功 能 )功
25、 能 : 屏 幕 上 显 示功 能 : 屏 幕 上 显 示 一 串 以一 串 以 $结 尾 的 字 符结 尾 的 字 符待 显 示 字 符 串 首 单 元 地 址待 显 示 字 符 串 首 单 元 地 址 ( DS: DX)DATA SEGMENTBUF DB HOW DO YOU DO?$DATA ENDSCODE SEGMENTMOV DX,OFFSET BUFMOV AH,9INT 21HCODE ENDSHOW DOBUF、O YU DO?$微 型 计 算 机 原 理 第 五 章 汇 编 语 言 程 序 设 计2010年 7月 1日 Thursday 45例例 : 画 图 说 明 下
26、列 伪 指 令画 图 说 明 下 列 伪 指 令所 定 义 的 数 据 在 内 存 中 的 存 放所 定 义 的 数 据 在 内 存 中 的 存 放形 式 。形 式 。ARV1 DB 3+4,43H,-2ARV2 DW 474FH,1,?COUNT EQU 2ARV3 DB 2 DUP(1,COUNT DUP(2)ARV4 DD ARV3ARV5 DB ABARV6 DW AB解 : 假 设 此 数 据 段 的 段 地解 : 假 设 此 数 据 段 的 段 地址 为址 为 1234H, 即, 即 DS 1234H, 则, 则有 :有 :1234H:0000H01H02H03H04H05H06H07H08H1234H:0009H0AH0BH0CH0DH0EH0FH10H11H12H13H14H15H1234H:0016H07H43HFEHARV14FH47H01H00HARV201H02H02H01H02H02HARV309H00H34H12HARV441H42HARV542H41HARV6