1楼:颓废_小胖
本来是想写的 想到你这个五位数要用两个寄存器来存放 因为有可能大于65535 真够麻烦的 估计值200分以上了
assume cs:code
data segment
db 6,?,6 dup(?),6,?,6 dup(?)data ends
code segment
start:mov ax,data
mov ds,ax
xor ax,ax
xor dx,dx
mov ah,0ah
int 21h
mov dx,8
int 21h
mov bx,2
mov cx,5
s1:sub byte ptr [bx],30sub byte ptr [bx+8],30inc bx
loop s1
mov bx,2
mov cx,2
s2:xor ax,ax
mov al,[bx]
mov si,ax
mov al,[bx+1]
mov di,10
mul di
add si,ax
xor ax,ax
mov al,[bx+2]
mov di,100
mul di
add si,ax
xor ax,ax
mov al,[bx+3]
mov di,1000
mul di
add si,ax
xor ax,ax
mov al,[bx+4]
mov di,10000
mul di
add ax,si
adc dx,0
push ax
push dx
add bx,8
loop s2
pop dx
pop ax
pop bx
pop cx
add ax,cx
adc dx,bx
mov ax,4c00h
int 21h
code ends
end start
2楼:百度网友
这个程序难度不是很大,只是比较麻烦.
给个思路:
设三个字符串缓冲区,两个双字的变量.
第一第二字符串缓冲区接收两个输入的数;由于输入的仅是字符,所以要每个字符减去30h,得到的字符存储回原来缓冲区,然后个位*1,十位*10,百位*100,类推...再累加到相应的双字变量中.
两个双字变量再相加(注意进位加!);值存放在第一变量中.
最后,将第一变量中的数值转换成字符串(注意先除再减),再输出就可以了.
最后建议:提高悬赏至200分以上,大家才不嫌麻烦.
3楼:百度网友
我写了两个四位数相加的程序 原理相同你自己改啊data segment ; 定义数据段x1 dw 1234
x2 dw 5660
data ends
code segment ;定义**段main proc far
assume cs:code,ds:data,es:datastart:push dx ;返回dos的标准方法mov ax,0
push ax
mov ax,data
mov ds,ax
mov es,ax ;初始化clc
mov dx,0
mov ax,x1 ;相加
adc ax,x2
mov bx,1000 ;相除div bx
push dx
add al,30h ;求ascii值mov dl,al ;dos系统功能调用,显示mov ah,2
int 21h
pop dx
mov ax,dx
mov dx,0
mov bx,100 ;相除div bx
push dx
add al,30h ;求ascii值mov dl,al ;显示mov ah,2
int 21h
pop dx
mov ax,dx
mov dx,0
mov bx,10 ;相除
div bx
push dx
add al,30h ;求ascii值mov dl,al ;显示mov ah,2
int 21h
pop dx
mov ax,dx
add ax,30h
mov dx,ax
mov ah,2
int 21h
retmain endp
code ends
end start
4楼:百度网友
编程前,应把算法先想清楚了。
code segment;任意两个五位数相加assume cs:code,ds:code,ss:codeorg 100h;标准com格式
start:
jmp begin
tips db 0dh,0ah,09,'? $'
x1 db '23456+98765='
y1 db '000000. esc to quit...',24hbegin:
push cs
pop ds
push ds
pop es
mov ax,3;文本模式
int 10h
again:mov dx,offset tips;提示mov ah,9
int 21h
call input;接收任意两个五位数
call count;求和
;*** 输出十进制的结果 ***
mov dx,offset y1[-1]
mov ah,9
int 21h
mov ah,0;暂停
int 16h
cmp ah,01;esc 退出
jnz again;计算下一题
mov ah,4ch;结束
int 21h
input:cld
mov si,offset x1
mov cx,2
t0:push cx
mov cx,5
t1:mov ah,0;接收数字
int 16h
cmp al,30h;数据校验
jb t1
cmp al,39h
ja t1
mov ah,0eh;数据显示
int 10h
mov [si],al;存入数据区
inc si
loop t1
inc si;跳过加号
pop cx
cmp cx,2
jnz t2
mov ax,0e2bh;输出加号
int 10h
t2:loop t0
retcount:mov si,offset x1[4]mov di,offset y1[5]
xor dx,dx;清进位
mov cx,5;改变此值,可实现超大数相加t3: call subs_c;逐位累加dec si
dec di
loop t3
cmp dl,1;校正最高位
jnz t4
or dl,30h
mov [di],dl;有进位,置1
jmp t5
t4: mov byte ptr [di],20h;去掉前导0t5: ret
subs_c: ;[原创]多位加法核心子程序mov al,[si];最低位对齐
mov ah,[si+6]
and ax,0f0fh
add al,ah;自加
add al,dl;加后面进位
aam;二化十
mov dl,ah;存进位位
or al,30h
mov [di],al;保存1位和值
retcode ends
end start
5楼:解双
以己昏昏,示人昭昭。
学习了。
想用汇编语言输入一个五位数,并求出五位数各位之和,哪位大神帮忙给个**,希望能有注释 20
6楼:匿名用户
datas segment
buf db 5 dup(0)
datas ends
stacks segment
dw 10 dup(0)
stacks ends
codes segment
assume cs:codes,ds:datas,ss:stacksstart:
mov ax,datas
mov ds,ax
mov cx,5;循环5次
lea si,buf;取存数地址
a1: mov ah,1
int 21h
sub al,30h
mov [si],al
inc si
dec cx
jnz a1 ;接收5个数字
lea si,buf
mov al,0
mov cx,5
a2: add al,[si];五个数字
累加inc si
dec cx
jnz a2;最后结果在al
mov ah,4ch
int 21h
codes ends
end start
c语言编写程序输入正整数n计算,c语言编写程序,输入一个正整数n,计算1+(1/3)+(1/5)+...的前n项之和。求过程
1楼 匿名用户 include int main for i 1 i n i printf sum 3f n sum return 0 示例运行结果 20sum 2 480 2楼 匿名用户 include int main void for int i 0 i printf 数列前 d 项之和为 g...
c语言作业编写程序读入数字字符,C语言作业:编写一个程序,读入一个数字字符0——9,将其转换为相应的整数后显示出来 求大神解答啊
1楼 匿名用户 你好,程序如下 include void main 有疑问提出望采纳 2楼 匿名用户 如下 include int main 3楼 匿名用户 include int main c语言作业 编写一个程序,读入一个数字字符0 9,将其转换为相应的整数后显示出来 4楼 include vo...