汇编语言程序设计过程及实例
汇编语言程序设计过程及实例 IBM PC微机系统原理及应用(七)
西安理工大学计算中心(710048) 张玉清 西北纺织工学院自控系(710048) 王春玲
--------------------------------------------------------------------------------
1.汇编语言程序设计环境、工具及过程
软件开发中,常用的汇编语言设计环境及工具软件是:美国Microsoft公司的宏汇编MAS
M、调试软件CodeView以及DOS中的DEBUG;美国Borland公司的TURBO Assembler和调试工具
Turbo Debugger,后者汇编功能与MASM高度兼容。
汇编语言程序上机过程(以宏汇编为例):
①用编辑器编辑汇编语言源程序(.ASM);
②用汇编程序MASM将.ASM文件汇编成目标文件(.OBJ);
③用连接程序LINK将目标文件转换成可执行文件;
④在DOS环境或DEBUG环境中调试和运行可执行文件。
这些工作核心是第四步——调试,主要采用DEBUG工具软件分析和调试程序,直至程序正
确无误(注:DEBUG是DOS中的工具软件,它含有单步(T)、断点跟踪运行(G)等多项功能,是汇
编语言标准调试工具,同时也可应用于系统软件分析、加密解密、防治病毒等)。
2.汇编语言程序设计实例
前面简要介绍了汇编语言程序设计的有关背景知识,这里我们给出一个完整可运行的程
序实例,供读者作为汇编语言程序设计实例,相信经过上机实践一定会对汇编语言有一个直
观的认识和初步的印象。
例如用汇编语言程序设置PC微机系统日期
设计思路:从键盘输入新日期(年/月/日)存入内存缓冲区,然后由DOS功能2BH号调用置
系统日期。若置入成功,显示OK!;否则,显示ERROR IN INPUT!。
2BH是DOS调用功能:按CX,DX中的年、月、日(二进制数),设置系统日期。
入口参数:CX=年(1980~2099);DH=月(1~12);DL=日(1~31)
data segment para ’data’ ;数据段开始
buf db 11,12 dup(0) ;输入日期(YYYY/MM/DD)及回车符
;的内存缓冲区,长度11
mess1 db ’ please enter new data: $’ ;显示字符串
mess2 db 0dh,0ah,’error in input ! $’
mess3 db 0ah,0dh,’ok ! $’
data ends ;数据段结束
stack segment para ’ stack ;堆栈段开始
sta1 dw 100 dup(?) ;定义堆栈大小
stack ends ;堆栈段结束
code segment para ’ code’ ;代码段开始
assume cs:code,ds:data,ss:stack,es:
data start proc far ;程序开始
push ds
xor ax,ax
push ax ;压栈DS:0,为INT 20H返
;回DOS作准备
mov ax,data
mov ds,ax ;设置数据段
aaaa: lea dx,mess1
mov ah,9
int 21h ;显示输入提示字符串
lea dx,buf
mov ah,0ah
int 21h ;接收键盘输入的日期
;并将其存放在BUF中
lea bx,buf
inc bx
inc bx
mov cx,4
call bin ;取十进制年,并转换
push ax
inc bx
mov cx,2
call bin ;取十进制月,并转换
push ax
inc bx
mov cx,2
call bin ;取十进制日,并转换
mov dl,al
pop ax
mov cx,ax
mov ah,2bh
int 21h ;设置系统日期
cmp al,0
jz bbbb
;判断设
置是否成功
lea dx,mess2
mov ah,9 ; 显示:ERROR IN INPUT!
in 21h
jmp aaaa
bbbb: lea dx,mess3
mov ah,9 ;显示:OK!
int 21h
ret bin proc ;子程序BIN
push dx
;功能:将十进制数转换成二进制
mov ax,0
;入口:BX指向十进制数
;cx指其长度
;CX指其长度 cccc: push
;出口;AX存放二进制数
cccc:push cx
mov cl,10
mov cl
mov dh,0
mov dl,[bx]
inc bx
and dl,0fh
add ax,dx
pop cx
loop cccc
pop dx
ret
bin endp ;子程序结束
code ends ;代码段结束
end stat ;源程序结束