汇 编 语 言 实 验 讲 义
魏祖雪
物电学院 2007.5
、
实验一 熟悉汇编语言使用环境
一、实验目的:
1、熟悉汇编语言的编辑、汇编、连接、运行的全过程。
2、了解汇编语言的程序结构、学习调用过程实现输入输出及用INCLUDE命令包含文件的方法。
3、
算术运算类操作实验
二、实验内容和步骤:
1、汇编语言源程序要运行的四个步骤:
(1)用编辑软件EDIT或记事本编辑一个扩展文件名为ASM的汇编语言源程序。 (2)用汇编程序MASM或TASM 汇编上述的汇编语言源程序,形成目标代码文件。(扩展名为OBJ)
(3)用连接程序LINK 或TLINK连接目标代码文件,形成可执行文件。(扩展名为EXE) (4)运行可执行文件。观察执行结果,以验证其正确性。 2、从键盘上输入两个十进制数正数(<32767),相加并显示结果。 参考程序: .model tiny .stack 256 .CODE START:
CALL read ;从键盘接受一个十进制数 MOV AX,BX
call dpcrlf
CALL read ;从键盘接受一个十进制数 ADD bx,aX
call dpcrlf ;回车换行 CALL write ;显示结果 .exit 0
INCLUDE out_B_D.ASM ;把二进制转换为十进制数输出过程:write INCLUDE in_D_B.ASM ;把二进制转换为十进制数输入过程:read END START
3. 改写程序为输入两个十进制数,相减并显示输出。 4.改写程序为输入两个十进制数,相乘并显示输出。 5.改写程序为输入两个十进制数,相除并显示输出。
(注:例4.27read:十进制—>二进制转换过程,出口参数BX=二进制数;例P4.28,write:二进制—>十进制转换过程,入口参数BX=二进制数, dpcrlf:回车换行) 三、记录结果与分析:(截图并打印在实验报告上) 四、实验中遇到的问题和解决的步骤、方法 五、实验改进与思考
1
补充实验: BCD->ASCII实验
1.实验目的:
(1)进一步熟悉汇编语言的汇编、连接、运行的全过程。
(2)了解汇编语言的程序结构、掌握BCD—>ASCII及字符输出的方法。 2.实验步骤:(同前) 3.实验参考程序:
NAME BCD TO ASCII
DATA SEGMENT
BCDBUF DB 12H,34H,56H,78H,90H,98H,76H,54H,32H,10H COUNT EQU $-BCDBUF ASCBUF DB 20 DUP(?) DATA ENDS
STACK SEGMENT PARA STACK ‘STACK’ SPACE DB 100 DUP(?) TOP DW ? STACK ENDS COSEG SEGMENT
ASSUME CS:COSEG,DS:DATA,ES:DATA,SS:STACK
MAIN PROC FAR START: PUSH DS MOV AX,0 PUSH AX MOV AX,DATA MOV DS,AX MOV ES,AX
MOV AX,STACK MOV SS,AX
MOV SP,OFFSET TOP
MOV SI,OFFSET BCDBUF MOV DI,OFFSET ASCBUF MOV CX,COUNT CLD
TRANT: LODSB MOV BL,AL PUSH CX MOV CL,4 SHR AL,CL OR AL,30H STOSB MOV AH,2
MOV DL,AL INT 21H
2
MOV AL,BL AND AL,0FH ADD AL,30H STOSB
MOV AH,2
MOV DL,AL INT 21H POP CX LOOP TRANT RET
MAIN ENDP COSEG ENDS
END START
4. 修改程序,在输出的每个数据后加一个逗号,重新调试运行之。
实验二 分支程序设计
实验目的:
1、掌握利用间接转移指令JMP BX实现多岔分枝的方法。 2、宏替换指令MACRO及ENDM。 3、符号扩展指令CBW。 实验程序:
disp macro msg
lea dx,msg mov ah,9 int 21h mov ah,4ch int 21h endm
3
stack
segment stack db 256 dup(0)
stack ends data segment parm db 16 dup(?) brtable dw offset bra,offset brb,offset brc
dw offset brd,offset bre,offset brf
msga db 'I like my IBM-PC!$' msgb db 'How are you!$' msgc db 'Nibao College$' msgd db 'This is a sample$' msge db 'Wellcome use my coputer!$' msgf db 'Theassemder language of 8088$' errms db 'Error!! invalid parameter!!$' data ends code segment
assume cs:code,ds:data,ss:stack
start: mov ax,data
mov es,ax mov si,80h lea di,parm mov cx,16 cld
rep movsb mov ds,ax cmp parm,2 jc err
mov al,parm+2 sub al,30h jc err cmp al,6 jnc err
lea bx,brtable cbw
add ax,ax add bx,ax jmp [bx]
err: disp errms bra: disp msga brb: disp msgb brc: disp msgc brd: disp msgd bre: disp msge brf: disp msgf code ends
end start
4
汇编上机讲义



