编写一个汇编累加程序

lily9 2008-11-06 01:44:26
要求:编写一个完整的程序:计算1+2+……+30;并将累加的结果用BCD码的形式存在AX中。
哪位知道完整的程序,共享一下好吗,先谢谢了
...全文
1221 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lily9 2008-11-10
  • 打赏
  • 举报
回复
可以解释下不
MIPL_walikb 2008-11-08
  • 打赏
  • 举报
回复
第一步,可以初始化一个累加器,一个存放计算结果的变量,比如result

第二步,执行时,result不断的加上累加器的值,当累加器值>30的时候,跳出这个循环

第三步,这一步对结果进行bcd码的转换,可以根据结果的位数,除以10的n次方,以取十位或百位上的值
以你的题目为例,1+…+30=465,用结果值除以100d,此时商即是百位的4,怎么转bcd你会吧,转好后,存入相应变量待用
再将刚才运算的余数,即65,除以10,得到十位的6,转bcd
此时的余数即是10位的5,转bcd

将存储的转换结果取出即可

只要注意对除法运算的寄存器使用即可完成
BAYNPU 2008-11-07
  • 打赏
  • 举报
回复
assume cs:codeseg,ds:dataseg
dataseg segment
num db 4 dup(0)
dataseg ends
codeseg segment
start:
mov ax,dataseg
mov ds,ax
mov cx,30
xor ax,ax
mov bx,10
xor dx,dx
s:
add ax,cx
loop s
lea si,num+3
step1:
cmp ax,bx
jb over
xor dx,dx
div bx
mov [si],dl
dec si
jmp step1
over:
mov [si],al
mov cx,4
xor si,si
mov ah,02h
dis:
mov dl,[si]
add dl,30h
inc si
int 21h
loop dis
mov ah,1
int 21h
mov ah,4ch
int 21h
codeseg ends
end start
lily9 2008-11-07
  • 打赏
  • 举报
回复
但是要把结果用BCD码的形式存在AX中阿,而且题目的意思也是要把他用1+2+3+……+30这样算出来哦
xtdumpling 2008-11-06
  • 打赏
  • 举报
回复
用Sum=n*(n+1)/2算的,在debug下,load后,g就可以看到ax的sum值了.
.model tiny
.386
.code
MAX equ 30d;1+2+3+...30=?
start:
mov al,MAX
mov bl,al
inc al
mul bl
shr ax,1
mov cl,100d
div cl
mov dh,al
mov cl,8
shr ax,cl
mov cl,10d
div cl
mov cl,4
shl al,cl
mov dl,al
or dl,ah
mov ax,dx
int 3
mov ax,4c00h
int 21h
end start

21,497

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧