研究了一下怎麼用組合語言 求 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 中的暫存器和標誌!但是,在擁有這種能力的同時,程式設計師必須負責處理資料表示的細節和指令的格式。程式設計師工作在乙個具有大量詳細資訊的層次。現在以乙個簡單...