微机原理与汇编语言_实验3_循环程序设计实验讲解

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

微机原理与汇编语言

实验报告

姓名x x x学号xxxxxx 专业班级计科x班

课程名称微机原理与汇编语言实验日期2014.10.22

实验名称循环程序设计实验成绩

一、实验目的

1、掌握循环程序的设计方法。

2、掌握比较指令、转移指令和循环指令的使用方法。

3、进一步掌握调试工具的使用方法。

二、实验内容

1、实验原理

(1)键盘输入的十进制数如368在计算机中是以33H,36H,38H形式存放的,如何将它们转换为一个二进制数101110000B,以便对累加循环的循环次数进行控制是本程序首先要解决的问题

(2)累加结果为一个16位的二进制数,为了显示结果,必需把它们转换为十进制数

2、实验步骤

(1)流程图

(2)实验源码

.model small

.stack ;定义堆栈段

.data ;定义数据段

inf1 db "Please input a number(1-627):$"

inf2 db 0ah, 0dh, "1+2+......+$"

ibuf db 7, 0, 6 dup(0)

obuf db 6 dup(0)

.code

start: mov ax, @data

mov ds, ax

mov dx, offset inf1

;将屏幕输入的十进制数(存放于ibuf)转化为二进制数存储于ax 中

mov ah, 09h

int 21h

mov dx, offset ibuf

mov ah, 0Ah

int 21h

mov cl, ibuf+1

mov ch, 0

mov si, offset ibuf+2

mov ax, 0

loop1: mov dx, 10

mul dx

and byte ptr [si], 0Fh

add al, [si] 从键盘输入一个十进制数,并将其转换为二进制数,存放在AX中

开始

结束

素、、

(CX)-1=0

累加循环次数送CX(MOV CX,AX)AX清0(AX中存放累加和)

BX送1(BX存放每次循环累加的数,每循环一次,BX值加1)

ADD AX,BX

INC BX

累加和(在AX中)转换为十进制数并

显示

Y

N

adc ah, 0

inc si

loop loop1

mov cx, ax ;计算1+2+3+...+n

mov ax, 0

mov bx, 1

loop2: add ax, bx

inc bx

loop loop2

mov di, offset obuf+6 ;将ax中的二进制数转换为十进制数并以ascii的形式存于obuf

mov byte ptr [di], '$'

mov bx, 10

loop3: mov dx, 0

div bx

add dl, 30h

dec di

mov [di], dl

or ax, ax

jnz loop3

dec di

mov [di], '='

mov dx, offset inf2 ;结果输出

mov ah, 09h

int 21h

mov cl, ibuf+1 ;显示n

mov ch, 0

mov si, offset ibuf+2

loop4: mov dl, [si]

add dl, 30h

inc si

mov ah, 02h

int 21h

loop loop4

mov dx, di

mov ah, 09h

int 21h

mov ax, 4c00h

int 21h

end start

实验习题1源码:

; multi-segment executable file template.

.model small ;定义程序的存储模式(small表示小型模式)

.stack ;定义堆栈段

.data ;定义数据段

inf1 db 0ah, 0dh, "1+2+......+$"

obuf1 db 6 dup(0)

obuf2 db 7 dup(0) ;除了六位数字外还要有一个=号.code

start: mov ax, @data

mov ds, ax

mov dx, offset inf1 ;输出 1+2+......+

mov ah, 09h

int 21h

mov ax, 0 ;计算1+2+3+...+n

mov bx, 1

loop1: add ax, bx

inc bx

cmp ax, 60000

jbe loop1

push ax ;将最终结果备份入栈

push bx ;将n备份

pop cx

mov di, offset obuf1+5

;将cx二进制数转换为十进制数并以ascii的形式存于obuf1

mov byte ptr [di], '$'

mov ax, cx

mov bx, 10

loop2: mov dx, 0

div bx

add dl, 30h

dec di

mov [di], dl

or ax, ax

jnz loop2

mov dx, di ;输出n

mov ah, 09h

int 21h

pop ax

mov di, offset obuf2+6

;将ax中的二进制数转换为十进制数并以ascii的形式存于obuf2

mov byte ptr [di], '$'

mov bx, 10

loop3: mov dx, 0

div bx

add dl, 30h

dec di

mov [di], dl

相关文档
最新文档