求用汇编语言编写实现任意两个五位数相加的程序

2021-05-25 08:54:30 字数 4842 阅读 8658

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...