计算机汇编语言实验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档