組合語言輸出乙個多位數

2021-10-10 08:46:41 字數 2089 閱讀 9707

研究了一下怎麼用組合語言 求 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 ,

2int

21h

loop p2

mov ah,

4ch ;程式結束

int21h end

求陣列和

datas segment

n db 5

n1 db 123,2

,3,4

,5num db 0,0

,0,0

,0sum 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]

cbwadd 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,

0loopnz p

mov cl,bh

mov ch,

0

p2: dec si

mov dl, num[si]

mov ah ,

2int

21h

loop p2

mov ah,

4ch int

21h

codes ends

end start

組合語言 多位數輸入輸出 迴圈設計實驗

多位數的輸入輸出 datas segment 此處輸入資料段 x dw n dw 10 datas ends stacks segment 此處輸入堆疊段 db 100 dup stacks ends codes segment assume cs codes,ds datas,ss stacks ...

輸出乙個多位數的各位上的數字

以乙個例題為例 給乙個整數,要求 求出他是幾位數 分別輸出每一位數字 按逆序輸出各位數字,例如原數為321,應輸出為123.解題思路 1 判斷幾位數,每次num 10然後計數,直到除到原數為0為止,計數的數字就為位數 2 主要利用 和 得到各個位的數字,例如123 10就可以得到個位數字3,如果要獲...

32組合語言程式說明 第乙個組合語言程式

組合語言以隱晦難懂而著名,但是本教程從另乙個角度來看它 它是一種幾乎提供了全部資訊的語言。程式設計師可以看到正在發生的所有事情,甚至包括 cpu 中的暫存器和標誌!但是,在擁有這種能力的同時,程式設計師必須負責處理資料表示的細節和指令的格式。程式設計師工作在乙個具有大量詳細資訊的層次。現在以乙個簡單...