8086汇编语⾔程序设计——第⼀个程序
本系列以80X86系列微型计算机为基础,以MASM5.0为汇编上机实验环境,重点介绍Intel8086指令系统。Intel8086指令系统中有100多条指令,利⽤这些指令可以编写出复杂的程序实现更多功能。
汇编语⾔是直接控制计算机硬件⼯作的最简便的语⾔。学习了汇编语⾔可具有在CPU寄存器级上进⾏控制和操作的能⼒,可获得直接对计算机硬件底层编程的经验。
⼀个计算的例⼦
例 *编写⼀个汇编语⾔程序,实现下列公式计算。
假设X=4,Y=5
汇编指令如下:
如果在DEBUG下⽤A命令输⼊这些指令,必须把X、Y换成具体的数值;Z、Z1是存储单元地址,最后两条指令可写为MOV [0],AL和MOV [1],AH,这样才能⽤T命令执⾏。
D:\dos〉DEBUG
-
A
MOV AL,4
ADD AL,5
MOV BL,8
IMUL BL
MOV BL,4
MOV BH,0
SUB AX,BX
MOV BL,2
IDIV BL
MOV [0],AL
MOV [1],AH
采⽤DEBUG的A命令输⼊程序的做法明显不⽅便,⼀是⽆法给出变量名即符号地址,⼆是调试修改程序不便。
1. 编写
⼀个完整的汇编语⾔源程序需要增加段定义伪指令和定义数据存储单元伪指令等必须有的伪指令。
伪指令与C语⾔等⾼级语⾔中的说明性语句的含义类似,起到说明作⽤。
⽤记事本gedit或者vi编写,保存到dos⽬录下
注释符号为;号
2. 汇编、链接、执⾏
汇编语⾔源程序既可以⽤⼤写字母也可以⽤⼩写字母书写。汇编语⾔程序建⽴及汇编过程如图所⽰。
⽤户编写的源程序要经汇编程序MASM汇编(翻译)后⽣成⼆进制⽬标程序,⽂件名默认与源程序同名、扩展名为.OBJ;再经过LINK连接⽣成可执⾏程序,⽂件名默认与源程序同名、扩展名为.EXE。
注意:源程序⼀定要和MASM和LINK⽂件放在同⼀个⽂件夹中。执⾏MASM和LINK命令时需要按多次回车。
3. 在DEBUG下执⾏程序
MOV AH,4C指令对应的偏移地址是0023,这就是断点(所谓断点,就是程序执⾏到该处停下来不再继续)。⽤G 0023(G 断点)执⾏程序。
带彩⾊显⽰的算术程序
屏幕显⽰和键盘输⼊
凡是涉及到键盘输⼊、屏幕显⽰等输⼊输出操作,都可以⽤软件中断指令INT n的功能调⽤来实现。
在微机系统中,功能调⽤分两个层次,最底层的是BIOS功能调⽤,其次是DOS功能调⽤,它们都是通过软件中断指令INT n来进⾏调⽤的。除了⽤INT指令实现输⼊和显⽰之外,还可以通过直接写显⽰缓冲区的⽅式显⽰字符。
DOS功能调⽤
DOS的功能调⽤采⽤INT 21H指令,调⽤时要求在AH中提供功能号,在指定的寄存器和存储单元中提供调⽤必需的参数和缓冲区地址,执⾏后系统在AL中放⼊返回参数。
常⽤的DOS功能调⽤有5个:
键盘输⼊1个字符: 1号DOS功能调⽤
显⽰器输出1个字符: 2号DOS功能调⽤
键盘输⼊缓冲区: 10号DOS功能调⽤
显⽰字符串: 9号DOS功能调⽤
返回DOS控制: 4CH号DOS功能调⽤
注意:
I/O处理操作的都是ASCⅡ码,对于键盘输⼊的数字,做计算时需将ASCⅡ码转变为⼆进制数,输出显⽰数据时需将⼆进制数转为ASCⅡ码。数字0~9的ASCII码为30H~39H,可以看出两者之间相差30H。
DOS功能调⽤例⼦
例:显⽰两⾏字符串(回车换⾏功能)。第1⾏为“Input x:”,第2⾏为“Output y=x+1:”。从键盘输⼊x,输出y=x+1的值。
data segment
mess1 db 'Input x:','$'
mess2 db 0ah,0dh, 'Output y:$';0ah和0dh是换⾏和回车
y db ?
data ends
code segment
assume cs:code,ds:data
start:mov ax, data
mov ds,ax ;数据段的段地址→ds
mov dx,offset mess1
mov ah,9;显⽰提⽰信息“Input x:”
int 21h
mov ah,1;1号功能,键盘输⼊,键⼊的值在al
int 21h
add al,1;al+1→al
mov y,al ;保存到y单元
mov dx,offset mess2
mov ah,9;在下⼀⾏显⽰提⽰信息“Output y:”
int 21h
mov ah,2;2号功能,显⽰⼀个字符
mov dl,y ;显⽰的字符要放⼊dl,显⽰x+1的值
int 21h
mov ah,4ch
int 21h
code ends
end start
另⼀个⽰例
简化的程序结构
从MASM5.0开始,提供了简化的段定义结构,这种结构⽤于⼩规模的程序设计中。
⼀般格式为.MODEL SMALL。这种格式是⼩型模式,程序可以有⼀个代码段、⼀个数据段,每段不⼤于64KB。
⽰例*⽤简化的程序格式从键盘输⼊两个⼀位的⼗进制数,做加法运算。相加后以蓝底黄字显⽰在屏幕上。
设计思路:
(1)键盘输⼊⽤DOS中断调⽤1号功能;显⽰采⽤写显存⽅法;
(2)经⾮压缩BCD码加法调整指令AAA调整后会将AL的⾼4位清零,因此键盘输⼊的数字不必去掉30H,可直接运算;
(3)⽤BIOS中断调⽤INT 10H的3号功能获得光标的位置,让结果显⽰在光标处;
(4)由于计算结果不会超过两位⼗进制数,可⽤SI寄存器保存⼗进制数的ASCII码。
注意到,这⾥使⽤了BIOS中断调⽤INT 10H。
汇编指令有多少个⼩贴⼠:彩⾊字符显⽰属性字节为前景⾊由4位(0~3位)组合,背景⾊由3位(4~6位)组合。最⾼位BL表⽰闪烁,RGB为红、绿、蓝,I代表亮度。例如蓝底黄字的属性值为1EH。表4-3列出了16种颜⾊组合。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论