计算机汇编语言实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汇编语言实验报告
姓名:组长:张亚昊(11072107)
组员:安然(11072109)
完成日期:2013年4月
题目1:分支程序设计
【题目要求】
编写程序,键入学生成绩(百分制),按A 、B 、C 、D 显示在屏幕上。【编程思路】
输入并存储一个INT 的赋值,比较一个数值在其中的哪个分支,并现实成绩的显示(ABCDE)【程序流程图】
【源代码】
一、
dseg segment MsgInput db 0ah,0dh,'Input a score:','$'MsgError db 'Invalid Input!','$'BufInputdb 5,?,5dup(?)Grade db 'EDCBA','$'dseg ends cseg segment
assume ds:dseg,cs:cseg BEGIN:
开始
一个INT 的赋值
比较成绩属于哪一个档
数值在1-60
数值在60-70
数值在70-80
数值在80-90
数值在90-100
输出结果
mov ax,dseg
mov ds,ax
Init:
lea dx,MsgInput mov ah,9
int21h
lea dx,BufInput mov ah,0ah
int21h
mov dl,0ah
mov ah,2
int21h
mov ax,0
lea bx,BufInput+2 LoopCalc:
cmp byte ptr[bx],0dh je Compare
cmp byte ptr[bx],'0' jb Error
cmp byte ptr[bx],'9' ja Error
sub byte ptr[bx],'0' mov cx,10
mul cx
mov cx,0
mov cl,[bx]
add ax,cx
inc bx
jmp LoopCalc Compare:
cmp ax,100
ja Error
mov cl,10
div cl
cmp al,9
jbe Next1
mov al,9
Next1:
cmp al,5
jae Next2
mov al,5
Next2:
sub al,5
lea bx,Grade
xlat
mov dl,al
mov ah,2
int21h
jmp Init
Error:
lea dx,MsgError
mov ah,9
int21h
jmp Init
mov ah,04ch
int21h
cseg ends
end BEGIN
【程序测试与实现】
题目2:循环程序设计
【题目要求】
设有一段文字,编写一段程序查找字母a 出现的次数,并显示在屏幕上。【编程思路】
输入并存储一个字符串,将字符串长度存入CL。
设置计数器AX 并清零,顺序遍历字符串,如果字符与A 相同,计数器+1,循环遍历CL 次。显示AX 中内容,就可以显示A 出现的次数。【程序流程图】
N
不是'A'
是'A'
Y
Y
计数器AX=0长度存入CL 指针初始化首址
比较指针指向字符
AX=AX+1指针SI+1CL=CL-1
指针SI+1CL=CL-1
CL=0
CL=0?
计数器AX/10,AL=AL+30H AH=AH+30H
输出个数
输入字符串
存储字符串
开始
结束
【源代码】
STACKS SEGMENT STACK;堆栈段
DW128DUP(?);注意这里只有128个字节STACKS ENDS
DATA SEGMENT
BUF DB30H
DB?
DB20H DUP(0)
COUNT EQU BUF+1
STRING1DB'Count the num of A$'
STRING2DB'Please input a string:$'
DATA ENDS
ENT MACRO;宏汇编定义换行
MOV DL,0DH
MOV AH,2
INT21H
MOV DL,0AH
INT21H
ENDM
CODE SEGMENT
ASSUME DS:DATA,CS:CODE
START:MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET STRING1;显示标题
MOV AH,09H
INT21H
ENT
MOV AH,09H;显示‘*’
MOV AL,'*'
MOV BL,0C1H
MOV CX,20
INT10H
ENT
START2:MOV DX,OFFSET STRING2;显示“PLEASE INPUT A STRING”
MOV AH,09H
INT21H
ENT
MOV DX,OFFSET BUF;存储输入字符串
MOV AH,0AH
INT21H
CMP BUF+2,'0'
JE EXIT
CMP BUF+1,20
JG ERROR
ENT
XOR AX,AX;AX作为A的计数器,清零
MOV CH,0
MOV CL,COUNT;循环次数存入CL,表示字符串长度
MOV SI,2
AGAIN:MOV BL,BUF[SI]
CMP BL,'a'
JE SAME
JNE NOTSAME
MOV AH,4CH
INT21H
NOTSAME:INC SI
LOOP AGAIN
JMP PRINT
SAME:INC AX;A计数器+1,表示A出现次数
INC SI;指针+1
LOOP AGAIN
JMP PRINT
PRINT:MOV DL,10;10给除数
DIV DL;AX内容除10
ADD AL,30H;将存储在主存单元中的商数值转换为ASCII
ADD AH,30H;将存储在主存单元中的余数数值转换为ASCII
MOV BH,AH