研究了一下怎么用汇编语言 求 1 - 20 的和 ,并且打印到屏幕上,难点就在于打印。大概的思路就是 每次 除10,把余数保存到数组中,最后把数组倒序输出。
代码:
; 输出一个 小于 2560 的多位数
.MODEL SMALL
.DATA
num DB 0,0,0,0,0,0,0 ;定义一个数组num
.STACK
DB 128 DUP (?)
.CODE
.STARTUP
mov ax,123
mov cx ,0 ;初始化 0 ,作用其实是 减一后为 无穷大 FFFF
lea si,num ;把 si 赋值为数组的起始地址
mov bh,0
p:
mov bl, 10
div bl ;这个数 除 10
push ax ; 把 ax 保存起来,防止被破坏
add ah,30h ;把转化成字符
mov num[si],ah;把余数 存到 num 数组
inc si ; 地址 ++
inc bh ; 计数器 ++
pop ax ;取出 ax ,并且把 ah 清空
mov ah ,0
cmp ax ,0 ;被除数为 0是 两者相等 , ZF 为 1
loopnz p ; cx为 0 ,或 ZF为 1 退出循环
mov cl,bh ;确定要输出的位数
mov ch,0
p2:
dec si
mov dl ,num[si];把数组中的每一个数 放到 dl 输出
mov ah ,2
int 21h
loop p2
mov ah,4ch ;程序结束
int 21h
END
求数组和
DATAS SEGMENT
N DB 5
N1 DB 123,2,3,4,5
num DB 0,0,0,0,0
SUM DW 0
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
mov ax,datas
mov ds,ax
MOV dx ,0
mov cl ,5
lea si ,N1
s :
mov al,[si]
cbw
add dx,ax
mov ax ,0
inc si
loop s
mov ax ,dx
mov cx,0
lea si,num
mov bh,0
p :
mov bl,10
div bl
push ax
add ah,30h
mov num[si],ah
inc si
inc bh
pop ax
mov ah,0
cmp ax,0
loopnz p
mov cl,bh
mov ch,0
p2:
dec si
mov dl, num[si]
mov ah ,2
int 21h
loop p2
mov ah, 4ch
int 21h
CODES ENDS
END start