汇编语言1加到n

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

实验名称——累加

实验人:班级:

学号:课程:汇编语言

目的:掌握循环程序设计与过程的设计方法

内容:求出1到n的累加

设计思想:这个程序的设计从结构上来看主要分为三部分——1,键盘输入的数字字符串(十进制数值)如何变为具有数值意义的二进制数2,利用一个循环结构将1到n的和求出3,将一个就有数值意义的二进制数转化为ASCII码并以字符串(十进制)显示出来(与计算结果的二进制数相等)。Array

.MODEL SMALL

.STACK 1024

.DATA

f1 db 'INPUT N:','$'

f3 db 0dh,0ah,'error','$'

p dw 0

sum dw 0

.CODE

.STARTUP

mov dx,offset f1

mov ah,9h ;显示字符input n:

int 21h

input:mov ah,1

int 21h ;显示输入字符并将字符的ascii值放入al cmp al,0dh

jz next

cmp al,'0'

jb next1

cmp al,'9' ;判断字符的合法性

ja next1

sub al,'0' ;将ascii码转化为每一位的数值mov ah,0

push ax ;通过堆栈保护数据

mov ax,p ;

shl ax,1

push ax

mov cl,2

shl ax,cl ;ax的值乘以4

xor bx,bx

pop bx

add ax,bx

xor bx,bx

pop bx

add ax,bx

mov p,ax ;将n的二进制数值存入p中

jmp input

next:mov bx,0 ;bx清零

xor ax,ax ;ax清零

mov cx,p ;循环次数存入cx中

again:inc bx

add ax,bx

loop again ;将n的累加求出并放入ax中

mov sum,ax ;将n的累加存入变量sum

loop1:mov dx,0 ;

mov bx,10

div bx

add dx,'0' 将要显示的数转化为ascii码

push dx ;通过堆栈保护数据

inc cx ;记录要显示字符的个数

cmp ax,0h ;判断商是否为零

jnz loop1

mov dx,offset info2

mov ah,9

int 21h ;这三步换行显示字符

loop2:pop dx ;将要显示的字符的ascii码放入dx mov ah,2

int 21h ;dos的2号调用显示字符

loop loop2 ;通过循环显示字符串

jmp next2 ;

next1:mov dx,offset info3

mov ah,9

int 21h

next2:

.EXIT

END

在这个程序的编写过程中收获了很多,如:如何将数值ascii 码转化为二进制数,循环结构的应用,将二进制数如何以十进制数值ascii码显示。在此过程也了解到了堆栈的重要性,而且还有关于dos的调用。这个程序的编写使我受益匪浅。但是在调试的过程中也走了不少弯路,一开始就拿课件上的程序组合在一起,自以为还可以,在调试的过程中不时就出现乱码,还有那个换行显示,一开始显示的字符不在同一行。反正就是显示错位,一看这情况真的很烦,但是到最后成功的时候真的很开心,前面的付出都是值得的。一开始对汇编真的不太感兴趣,但是通过这个程序的编写后,发现自己真的爱上汇编了。

相关文档
最新文档