8086指令系统汇编实训实例
更新时间:2024-06-23 02:39:01 阅读量: 综合文库 文档下载
- 8086的指令系统推荐度:
- 相关推荐
8086指令系统实训实例
一、80x86微处理器中的寄存器
AH BH CH DH SP BP SI DI IP FLAGS CS DS SS ES AL BL CL DL 累加器基址寄存器 计数寄存器 数据寄存器 堆栈指针寄存器 基址指针寄存器 源变址寄存器 目的变址寄存器 指令指针寄存器 标志寄存器 代码段寄存器 数据段寄存器 堆栈段寄存器 附加段寄存器
段寄存器 控制寄存器 地址指针和 变址寄存器 数据寄存器
通用寄存器
图1-1 80x86微处理器的基本结构寄存器
标志寄存器对照表
序号 类别 1 OF OV NV 2 DF DN UP 3 IF EI DI 4 TF 5 SF NG PL 6 ZF ZR NZ 7 AF AC NA 8 PF PE PO 9 CF CY NC EFLAG DEBUG=1 DEBUG=0 标志名称 设置 未设置 标志名称 设置 未设置 溢出 OV(溢出) NV(未溢出) 零位 ZR(为0) NZ(不等于零) 方向 UP(增加) DN (减少) 辅助进位 AC(有进位)NA(无进位) 中断 EI(许可) DI(禁止) 奇偶标志 PE(偶) PO(奇) 符号 NG(负) PL(正) 进位 CY (有进位) NC(清除进位)
1
二、 用DEBUG软件学习汇编语言
? DEBUG的几点规则说明:
1. 所有数据默认为16进制数,后缀“H”不用加;
2. DEBUG命令都是一个字母,字母大小写不分,后面的参数可以用空格分开,也可以不用;命令与数字之间可以不分开,但是两个十六进制数字之间必须分开,如:
L100 = L 100;100 110 ≠ 100110 ; 3. DEBUG中的地址表示格式有如下几种: 1) 段寄存器:偏移量,如:cs:100
2) 段地址:偏移量,如:04ba:100 或4ba:100 3) 默认段寄存器不写,只写偏移量,如:100; 4) 确定地址范围可以有两种表示方式:
a) 段地址:起始地址的偏移量 结束地址的偏移量,如:cs:100 110; b) 段地址:起始地址的偏移量 L(长度),如:cs:100 L10;
DEBUG软件基本指令用法一览表
指格式 令 A A [首地址] C 功能 备注 编译汇编语言指令 A 100 C [区段1] [区段长度] [区段将两块内存作比较 C 100 L20 200 2] D 100 L20 E 100 F 100 L10 90 2
D D [地址] [长度]& [地址范围] 显示内存的内容 E E [地址] 空格键编辑下一个 编辑内存内容 F F [地址] [长度] [内容]
填充指定内存区块内容 G G =[地址] [断点1] [断点2] 带有任选断点执行 G=100 ?? H H [数1] [数2] I I [端口地址] 十六进制数加减 读/显示输入字节 H 44 33 I 70 L 100 2 1 2 M 100 L10 110 N bb.com O 70 19 Q R AX S 100 L70 'j' T U 100 默认32字节 L L [地址]或[磁碟,磁轨,扇区] 装入文件或磁区 M M [原地址] [长度] [目标地址] 传送内存区块 N N [文件名] O O [端口位址] Q Q R R [寄存器] S S [地址] [长度] ‘参数’ T T [=地址]或[指令条数] U U [地址] [指令长度] W W [地址]或[指定BX、CX范围] 定义文件名 输出字节到端口 退出DEBUG界面 显示修改寄存器 对字符进行检索 单步追踪 反汇编 写入文件,默认写入 W 200 CS:100
实例: 查看主板BIOS信息:
① 输入“D FE00:0”,回车后看到的结果就是主板BIOS的厂商信息。
② 接着再输入“D FFFF:5 L 8”,回车后,主板的BIOS版本日期也出来了。
三、ASCII码与BCD编码
ASCII码是美国国家信息交换标准字符码(American Standard Code for Information Interchange )的字头缩码。早期的ASCII码采用7位二进制代码对字符进行编码。它包括32个通用控制字符,10个阿拉伯数字,52个英文大,小字母,34个专用符号共128个。7位ASCII代码在最高位添加一个“0”组成8位代码,正好占一个字节,在存储和传输信息中,最高位常作为奇偶校验位使用。扩展ASCII码,即第八位不再视为校验位而是当作编码位使用。扩展 ASCII码有256个。
3
数0-9 ASCII码的编码值为30H-39H,大写英文字母A-Z的编码值为41H-5AH,小写英文字母a-z的编码值为61H-7AH。
四、DOS常用的几个系统功能调用
1. 调用方法:
DOS功能调用的子程序已按顺序编号,功能号(00H~68H),其调用方法是: (1) 功能号→AH
(2) 入口参数、出口参数→指定寄存器 (3) INT 21H
(4) INT 20H 此为结束语句
2、常用的系统功能调用
1) 1号调用——从键盘输入单个字符
人口参数:ah=01 ; 出口参数:al=输入字符的ascii码 功能: 等待从键盘输入一个字符并送入al。
4
2) 2号调用——在显示器上显示输出单个字符
人口参数:ah=02 ; 出口参数:dl=待显示字符的ascii码 功能:将dl中的字符送显示器显示。 3) 9号调用——在显示器上显示输出字符串
入口参数:ah=09h; ds:dx=字符串的起始地址;
功能:将当前数据区中DS:DX所指向的字符串送显示器显示,注意字符串必须以 '$' 结尾。
4) 0AH号调用——从键盘输入字符串
入口参数:ah=0ah; ds:dx=输入缓冲区的起始地址;
第1个字节指出缓冲区能容纳的字符个数,即缓冲区长度,不能为0。 第2个字节保留,以存放实际输入的字符个数。 第3个字节开始存放从键盘输入的字符串。
功能: 从键盘接收字符串送入内存的缓冲区,同时送显示显示。
五、命名文件过程
1.N 文件名.COM ;命名文件, 文件必须以.com结尾 2.输入 RBX ;查看 BX 寄存器,存放文件长度值高八位
3.输入 RCX ;以CX存放文件长度值的低八位 4.输入 W ;用W命令将该程序写入磁盘中,即存盘
六、DEBUG实验程序
1. 显示一个字符 word.com
MOV DL,41 MOV AH,2 INT 21 INT 20
5
2. 显示所有ASCII码的程序 asci.com
MOV CX,0100 MOV DL,00
MOV AH,02 ;0105 INT 21
INC DL LOOP 0105 INT 20
3. 由键盘输入任意字符串,然后显示出来 key.com
MOV DX,0116 ;0116:字符个数,0117:实际输入数(包含$),0118:实际数 MOV AH,0A INT 21 MOV DL,0A MOV AH,02 INT 21 MOV DX,0118 MOV AH,09 INT 21
INT 20 ;0114 DB 20 ;0116
0116 06
4. 显示一字符串 stri.com
MOV DX,109 MOV AH,09 INT 21 INT 20
DB 'May I help you? $' ;0109
5. 将1~16放入以2000H开始的单元中; asm-2000.com
MOV BX,2000 MOV CX,0010 MOV AL,01
MOV [BX],AL ;0108 INC AL INC BX LOOP 0108 INT 20
6
6. 将1000H开始的4个单元中的大数找出来; dashu.com
MOV BX,1000
MOV AL,[BX] MOV CX,0003
INC BX ;0108 CMP AL,[BX] JNB 010F MOV AL,[BX]
DEC CX ;010F JNZ 0108 MOV DL,AL INT 20
7. 比较连续两个单元中数的大小,相等=88,不相等=FFH; comp50-2.COM
MOV SI,1000 MOV DI,2000 MOV CX,0002
MOV AL,[SI] ;0109 CMP AL,[DI] JZ 0113 MOV AL,FF JMP 0119
INC SI ;0113 INC DI LOOP 0109 MOV AL,88
INT 20 ;0119
8. 在1000h开始的100个单元中,搜索“$”字符,将字符的地址放入BX中,搜索不到则BX=FFFFH scas.com
MOV DI,1000 MOV AL,24 MOV CX,0064 CLD REPNZ SCASB
JZ 0112 MOV BX,FFFF JMP 0115
DEC DI ;0112
7
MOV BX,DI INT 20
9. 将5000为首的4个数,测试该数的最高位,为1送2000单元,为0送1000号单元; stor-lod.com
MOV SI,5000 MOV DI,1000 MOV BX,2000 MOV CX,0004 CLD LODSB
TEST AL,80 JNZ 0115 STOSB
JMP 011A
XCHG BX,DI ;0115 STOSB
XCHG BX,DI DEC CX JNZ 010D
INT 20 ;010D
10. 比较SI和DI的内容,相等则AL=00,不等则AL=FFH;COMPS.COM
MOV SI,1000 MOV DI,2000 CLD
MOV CX,0002 REPZ CMPSB
JZ 0112 MOV AL,FF JMP 0114
MOV AL,00 ;0112 INT 20 ;0114
11. 人机对话程序
:0100 DB “What’s your name? $” :0113 DB “Please input your code? $” :012c DB “OK! $”
:0131 MOV DX,0100 ;显示What’s your name?
8
MOV AH,09 INT 21 MOV DL,0A MOV AH,02 INT 21 MOV DL,0D INT 21
MOV DX,0200 ;从键盘输入名字 MOV AH,0A INT 21 MOV DL,0A MOV AH,02 INT 21 MOV DL,0D INT 21
MOV DX,0202 MOV AH,09 INT 21 MOV DL,0A MOV AH,02 INT 21 MOV DL,0D INT 21
MOV DX,0112 MOV AH,09 INT 21 MOV DL,0A MOV AH,02 INT 21 MOV DL,0D INT 21
MOV DX,0210 MOV AH,0A INT 21 MOV DL,0A MOV AH,02 INT 21 MOV DL,0D INT 21
MOV DX,012A MOV AH,09 INT 21 INT 20
;把名字显示出来 ;显示Please input your code? ;从键盘输入密码 ;显示OK! 9
:0200 DB 06 :0210 DB 08
七、汇编语言上机过程
1.上机前的软件准备:MASM510,Uedit32 2. 在MS-DOS操作系统下操作
1. 文本编辑器 (如:EDIT.COM ,Uedit32等) ○
2. 汇编程序 (如:MASM.EXE ,TASM.EXE 等) ○
3. 连接程序 (如:LINK.EXE 等) ○
4. 调试程序 (如:DEBUG.EXE 等) ○
八、汇编源程序
1.在屏幕上显示一个字符的源程序程序:
program segment ;定义段,段名“program”可任意取
assume cs:program ;把上面段的段基址放入 CS,即程序所在段的位置 mov dl,41h ;将显示字符的ascii码装入DL
mov ah,2 ;21功能的2号子功能调用,向屏幕输出一个字符 int 21h ;21号DOS功能调用 mov ah,4ch ;汇编结束,DOS返回 int 21h
program ends ;段终止 end ;汇编终止 2.显示所有ASCII的源程序:
program segment ;定义段;段名“program”可任意取 assume cs:program ;把上面定义段的段基址放入 CS mov cx,100h ;装入循环次数
mov dl,0 ;装入第一个ASCII码,随后每次循环装入新码 next: mov ah,2 int 21h
10
inc dl ;INC:递增指令,每次将数据寄存器 DL 内的数值加 1
loop next ;循环指令,执行一次CX减1,直至CX为0,循环终止
mov ah,4ch ;汇编结束,DOS返回 int 21h
program ends ;段终止 end ;汇编终止 3.在屏幕上显示一个指定字符串的源程序:
data segment
string db 'May I help you?''$' data ends
code segment ;定义段,段名为code
assume cs:code,ds:data ;程序所在段的位置,代码段放在CS
寄存器中;数据段放在DS寄存器中
start: mov ax,data ;字符串数据段的开始地址 mov ds,ax ;ds←输出字符串数据段段地址 lea dx,string ;dx←输出字符串偏移地址
mov ah,09 ;9号子功能(显示字符串)调用 int 21h ;21号DOS功能调用
mov ah,4ch ;完成输出显示,DOS返回 int 21h
code ends ;代码段结束 end start ;整个汇编结束
4.显示所有26个大小写英文字符 alla-z.asm abc segment assume cs:abc mov cx,1ah mov dl,41h next: mov ah,02h int 21h inc dl loop next
mov cx,1ah mov dl,61h next2: mov ah,02h int 21h inc dl loop next2 mov ah,4ch
11
int 21h abc ends end
5. 对话程序 dialog2.asm
DATA SEGMENT BUF DB 09H ;允许个数 DB ? ;实际个数 DB 10 DUP (?) ;真实输入 HIT DB \NAM DB 0AH,0DH,\AGE DB 0AH,0DH,\WAN DB 0AH,0DH,\DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX DISP0: MOV DX,OFFSET HIT MOV AH,09H INT 21H MOV AH,01H INT 21H CMP AL,'Q' JZ QUIT
DISP1: MOV DX,OFFSET NAM MOV AH,09H INT 21H KELBD1:MOV DX,OFFSET BUF MOV AH,0AH INT 21H DISP2:MOV DX,OFFSET AGE MOV AH,09H INT 21H KELBD2:MOV DX,OFFSET BUF MOV AH,0AH INT 21H DISP3: MOV DX,OFFSET WAN MOV AH,09H INT 21H
12
QUIT: MOV AH,4CH INT 21H
CODE ENDS END START
6. 一位数的减法, 6-2=4 ab.asm
data segment buf db 06h,02h data ends code segment
assume cs:code,ds:data start: mov ax,data mov ds,ax mov al,buf sub al,buf+1 mov dl,al or dl,30h mov ah,02h int 21h mov ah,4ch int 21h code ends end start
7. 显示2位数结果disp10,16-3 ①
DATA SEGMENT
LIST DB 16,48,? DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA MOV DS,AX CALL ADSUB CALL OUTPR QUIT: MOV AH,4CH INT 21H ADSUB PROC
MOV AL,LIST ADD AL,LIST+1
13
DAA
MOV LIST+2,AL RET ADSUB ENDP
DISPL PROC OR DL,30H MOV AH,02H INT 21H RET DISPL ENDP
OUTPR PROC MOV AL,LIST+2 MOV AH,0 MOV BL,10 DIV BL MOV DL,AL MOV BH,AH CALL DISPL MOV DL,BH CALL DISPL RET OUTPR ENDP
CODE ENDS
END START
②
DATA SEGMENT
LIST DB 16,3 ,? DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA MOV DS,AX CALL ADSUB CALL OUTPR QUIT: MOV AH,4CH INT 21H ADSUB PROC
MOV AL,LIST
14
SUB AL,LIST+1 MOV LIST+2,AL RET ADSUB ENDP
DISPL PROC OR DL,30H MOV AH,02H INT 21H RET DISPL ENDP
OUTPR PROC MOV AL,LIST+2 MOV AH,0 MOV BL,10 DIV BL MOV DL,AL MOV BH,AH CALL DISPL MOV DL,BH CALL DISPL RET OUTPR ENDP
CODE ENDS END START
8. 比较A、B两单元中的数,将较大的数送A单元。data segment
a db 39h b db 94h c db ? data ends code segment
assume cs:code,ds:data start:mov ax,data mov ds,ax mov al,a cmp al,b jnc next xchg al,b next: mov c,al
15
CPU: Central Processing Unit ,“中央处理器”的缩写, 又称微处理器。 RAM: Random-access memory.随机存储器, 随机存取内存, ROM: Read-only memory.只读存储器
KB:Kilo Byte,KB表示千字节。K=Kilo,构词成分,表示 千;千米;公斤; Million 百万
MB:Mega Byte,MB表示兆字节。M=Mega,构词成分,表示“兆;百万”。 GB:Giga Byte, GB表示千兆字节。G=Giga,构词成分,表示“千兆;十亿”。 DDR∶ Dual Data Rate SDRAM,双倍速率SDRAM。184线内存。 API∶ 应用程序接口。
Direct X∶ 微软专为PC多媒体硬件开发的接口。
Active X:是一种共享程序数据和功能的接口,如复制、粘贴等。 DLL∶动态连接库。动态调用的子功能程序。 IC卡:Intelligent Card,智能卡。 IC 芯片: Save 保存 exit 退出
Binary 二进制 Octal 八进制 Decimal 十进制 Hex Decimal 十六进制 assembly language 汇编语言 Accumulate 累加器 Addition 加 Subtraction 减 Multiplication 乘 Division 除 Debug 调试 Destination 目的 Direction 方向 Directory 目录
Index 索引 编入索引 变址
21
Source 来源 水源 源 Stack 堆叠 堆栈 堆 Interface 分界面 接口 Execution 执行 Code Segment 代码段 Extra segment 附加段
22
正在阅读:
8086指令系统汇编实训实例06-23
肇庆七星岩图片02-09
单词忘不了全套资料免费下载更新了02-20
办事指南,劳动用工合同12-26
电大本科2016年最新物权法网络考试及答案 试题312-13
职高数学试题及答案07-23
高纯度燕麦β-葡聚糖测定方法研究05-18
兽医基础知识试题08-16
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 指令
- 汇编
- 实例
- 系统
- 8086
- 管理计划书
- 教育研究方法期末试题题库
- 《你是猪么》另开新河 全环节众筹的新类型网剧
- 预防高处坠落和坍塌方案
- 北京科技大学2013安全工程专业初试试题··安全原理
- 中兴手机SWOT分析报告
- “数据表的排序和筛选”教学设计 - 图文
- 优质服务流动红旗评选活动实施方案
- 浅谈运用几何画板优化初中数学教学
- 航空航天基础知识
- 综合应急救援指挥中心房屋勘察报告
- 云南省昆明一中2018届高三考前适应性训练数学(文)试卷及答案
- 2014-2015鑫星小学六年级上册数学期末考试卷 1 及答案
- XenServer详细实施方案范例
- 赣榆县东关小学一年级语文练习(51)
- 平安建设先进个人材料1 - 图文
- 白领太“宅” 身体健康从何保证
- 辽宁高考英语作文大全 - 完美炮制法则
- 某企业期间费用的现状、存在的问题及对策研究
- 在市区城市管理动员大会上的表态发言