彙編之將數字轉化為十進位制顯示在螢幕上

2021-07-24 21:51:43 字數 2451 閱讀 5242

簡單一段**,耗時近3個小時,整體結構混亂,不過至少能正確輸出,雖然我也不知道為什麼正確

彙編真不是人玩兒的

assume cs:code, ds:data, ss:stacksg

data segment

dw 123, 12366, 1, 8, 3, 38

data ends

string segment

dw 48 dup (' ')

string ends

stacksg segment

db 128 dup (0)

stacksg ends

code segment

start: mov ax, data

mov ds, ax

mov ax, stacksg

mov ss, ax

mov sp, 128

mov di, 0

mov si, 0

mov cx, 6

conv: mov ax, ds:[si] ;(ax)=字型資料

call dtoc

add si, 2 ;ds:[si]指向下乙個字型資料

loop conv

mov ax, string

mov ds, ax

mov ax, 0b800h

mov es, ax

mov cx, 6

mov dh, 8

mov dl, 3

mov bl, 2

mov si, 0

s: call show_str

inc si

inc dh

mov dl, 3

loop s

mov ax, 4c00h

int 21h

;名稱: dtoc

;功能: 將word型資料轉換為表示十進位制的字串,字串以0為結尾符

;引數: (ax)=word型資料

; es:[di]指向字串的首位址

;返回: 無

dtoc: push cx

push bx

push dx

push si

mov bx, string

mov es, bx

mov si, 0 ;si作為計數器,統計有幾位數

mov bx, 10 ;除數設為10,用bx儲存

divk: mov dx, 0

div bx ;dx:ax/bx,商在ax中,餘數在dx中

add dx, 30h ;將數碼值轉化為對應數字的ascii值

push dx ;餘數入棧

inc si ;計數器加1

mov cx, ax

jcxz ok ;判斷商為0,則結束子程式

jmp short divk

ok: mov cx, si

write: pop bx

mov es:[di], bl

inc di

loop write

mov byte ptr es:[di], 0

inc di

pop si

pop dx

pop bx

pop cx

ret;名稱: show_str

;功能: 在指定的位置,用指定的顏色,顯示乙個用0結束的字串

;引數: (dh)=行號(取值範圍0-24),(dl)=行號(取值範圍0-79)

; (cl)=顏色,ds:di指向字串的位址

;返回: 無

show_str: push ax ;入棧

push dx

push di

push cx

mov di, 0 ;di儲存寫入視訊記憶體的位址

mov ah, 0

mov al, 160

mul dh

add di, ax

mov al, 2

mul dl

add di, ax ;計算8×160+30,寫入到di中

mov dh, bl ;將屬性值存放到dh中

mov ch, 0 ;ch置為0

show: mov cl, ds:[si] ;將ds:[si]中的值放入cl中

jcxz okk ;如果ds:[si]的值為0,跳轉到ok處

mov dl, cl ;將字元放入dl中

mov es:[di], dx ;將字元和屬性值寫入視訊記憶體中

inc si ;si自增

add di, 2 ;ds:[di]指向下乙個字元的位置

jmp short show

okk: pop cx

pop di

pop dx

pop ax

retcode ends

end start

棧 十進位制轉化為任意制

include include define stack init size 100 define size increment 5 typedef struct 棧結構 sqstack,sqstack int stackinit sqstack s 初始化棧 int push sqstack s,...

十進位制轉化為二進位制

今天我們來實現乙個有趣的小案例。要求 任意輸入乙個正十進位制數把它轉化為二進位制數輸出。我這裡使用了遞迴演算法 def transit num,binary 十進位制轉化為二進位制 param num 輸入的10進製 return none if num 2 remainder num 2 num ...

十進位制數轉化為D進製數

pat b1022 輸入兩個非負10進製整數a和b 2 30 1 輸出 a b 的 d 1輸入格式 輸入在一行中依次給出 3 個整數 a b 和 d。輸出格式 輸出 a b 的 d 進製數。輸入樣例 123 456 8輸出樣例 1103思路 除基取餘法。基 就是要轉化的進製d,將十進位制數每次除以d...