汇编语言程序设计实验指导书
二、 实验内容
1 编写一个程序,用二进制显示从键盘输入一个字符的ASCII码。
2 编写一个程序,记录某个字存储单元数据中1的个数,以十进制形式显示结果。
三、 实验准备
1 编写实验内容要求的两个程序。
2 写出调试以上程序,即修改程序参数,检查结果的操作方法。 3 熟悉源程序汇编、连接命令的使用方法即要回答的内容。
四、 实验步骤
1 用EDIT或其它编辑软件,编写.ASM源程序,例如Binary.ASM及Statistic.ASM。 2 对其进行汇编及连接,产生.EXE文件。 3 对.EXE文件进行调试运行。
a. 用DEBUG调试运行,学会修改AL内容的方法。 b. 对DSPKEY.EXE键入不同的字符,分别进行调试。 c. 在MS-DOS下运行这两个.EXE文件。
五、 实验报告要求
画出两个程序的流程图,若要独立编写程序,应列出相应的程序清单。
六、 参考程序段清单: ;Binary.asm
mov cx,8 ;CX←8(循环次数)
again: shl bl,1 ;左移进CF,从高位开始显示 mov dl,0 ;MOV指令不改变CF adc dl,30h ;DL←0+30H+CF ;CF若是0,则DL←' 0 ' ;CF若是1,则DL←' 1 ' mov ah,2
int 21h ;显示 loop again
;CX减1,如果CX未减至0,则循环
;Statistic.ASM ;数据段
number dw 1110111111100100B ;代码段
mov bx,number
xor dl,dl ;循环初值:DL←0
again: test bx,0ffffh ;也可以用cmp bx,0 jz done
;全部是0就可以退出循环,减少循环次数 shl bx,1 ;用指令shr bx,1也可以 adc dl,0
Page 6 of 26
汇编语言程序设计实验指导书
;利用ADC指令加CF的特点进行计数 jmp again
done: cmp dl,10 ;判断1的个数是否小于10 jb digit ;1的个数小于10,转移 push dx
mov dl,‘1’ ;1的个数大于或等于10 mov ah,2 ;则要先显示一个1 int 21h pop dx sub dl,10
digit: add dl,‘0’ ;显示个数 mov ah,2 int 21h
A---------------------------------------------------A
B——————————————————————B
实验 B
一、预习内容
1.多重循环程序和排序程序设计方法。 2.带符号数的比较转移指令:JL,JLE,JG,JGE
二、目的要求
1.掌握多重循环程序和排序程序设计方法。 2.掌握带符号数的比较转移指令:JL,JLE,JG,JGE
三、实验内容
建立学生名次表,以grade为首地址的数组中保存了学生的成绩,其中 grade+i 保存学号为i+1的学生的成绩。要求建立一个10个字的rank数组,并根据grade中的学生成绩将学生名次填入rank数组中,其中rank+i的内容是学号为i+1学生的名次(提示:一个学生的名次等于成绩高于该学生的人数加1)
DSEG SEGMENT
grade dw 88,75,95,63,98,78,87,78,90,60 rank dw 10 dup(?) DSEG ENDS CSEG SEGMENT
assume cs:CSEG, ds:DSEG start:
mov ax, dseg mov di,10 mov bx,0
loop:
①
mov ds, ax
Page 7 of 26
汇编语言程序设计实验指导书
mov dx,1 mov cx,10 ②
next:
cmp ax,[si] jge no_count inc dx
no_count:
add si,2 loop next ③ add bx,2
④ jne loop mov ax, 4c00h int 21h
CSEG ENDS end start
实验步骤:
1.输入,汇编并连接此程序。
2.在DEBUG下运行此程序,记录运行结果。
3.将转移指令JGE改为JG,JL,JLE分别运行记录排序结果,察看结果是否正确不对,并分析原因。
四、实验报告或作业
1.分析程序,画出程序流程图
2.汇编,连接及调试时产生的错误,其原因及解决办法。
3.记录JGE情况下的排序结果,同时比较将转移指令JGE改为JG,JL,JLE 时的排序结果,并分析结果正确与否,如果不正确,写出原因和解决办法。 4.思考:
如果想外循环也用loop实现,应该怎样修改程序?
B——————————————————————B 实验四 分支程序设计
A---------------------------------------------------A
实验A (必做)
一、 实验目的:
1 掌握分支程序的设计方法
2 掌握利用DEBUG修改参数、检查结果的方法。
3 掌握汇编语言源程序的编辑、汇编、连接及调试过程。
Page 8 of 26
汇编语言程序设计实验指导书
二、 实验内容
1 编写一个程序,显示AL寄存器中的两位十六进制数
2 编写一个程序,判别键盘上输入的字符;若是1-9字符,则显示之;若为A-Z或
a-z字符,均显示“c”;若是回车字符
三、 实验准备
1 编写实验内容要求的两个程序。
2 写出调试以上程序,即修改程序参数,检查结果的操作方法。 3 熟悉源程序汇编、连接命令的使用方法即要回答的内容。
四、 实验步骤
1 用EDIT或其它编辑软件,编写.ASM源程序,例如HEXASC.ASM及DSPKEY.ASM。 2 对其进行汇编及连接,产生.EXE文件。 3 对.EXE文件进行调试运行。
a. 用DEBUG调试运行,学会修改AL内容的方法。 b. 对DSPKEY.EXE键入不同的字符,分别进行调试。 c. 在MS-DOS下运行这两个.EXE文件。
五、 实验报告要求
画出两个程序的流程图,若要独立编写程序,应列出相应的程序清单。
六、 参考程序清单
(1) 显示AL中两位十六进制数程序: ;DISPHEX.ASM CODE SEGMENT
ASSUME CS:CODE START: MOV AL,3EH MOV BL,AL MOV DL,AL MOV CL,4 SHR DL,CL CMP DL,9 JBE NEXT1 ADD DL,7 NEXT1: ADD DL,30H MOV AH,2
INT 21H ;显示高位ASCII码 MOV DL,BL AND DL,0FH CMP DL,9 JBE NEXT2 ADD DL,7
Page 9 of 26
汇编语言程序设计实验指导书
NEXT2: ADD DL,30H MOV AH,2 V AH,2
INT 21H ;显示低位ASCII码 MOV AH,4CH INT 21H
CODE ENDS ;返回DOS END START
(2) 显示键入字符程序 ;DISPKEY.ASM CODE SEGEMENT
ASSUME CS:CODE START: MOV AH,1
INT 21H ;等待键入字符,送AL CMP AL,0DH ;是否是回车符?
JZ DONE ;是则转DONE退出程序 CMP AL,’0’ JB NEXT
CMP AL,’9’ JA CHARUP MOV DL,AL MOV AH,2 INT 21H JMP START CHARUP: CMP AL,41H JB NEXT CMP AL,5AH JA CHRDN
DISPC: MOV DL,’C’ MOV AH,2 INT 21H NEXT: JMP START CHRDN: CMP AL,61H JB NEXT CMP AL,7AH JA NEXT JMP DISPC DONE: MOV AH,4CH INT 21H CODE: ENDS
END START
A------------------------------------------A
Page 10 of 26
《汇编语言》实验讲义讲解



