汇编语言输出一个多位数

研究了一下怎么用汇编语言 求 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

猜你喜欢

转载自blog.csdn.net/hddddh/article/details/109564744
今日推荐