彙編作業(2006 5 19)

2021-04-07 06:12:09 字數 2489 閱讀 8807

data segment

x db 5, ?, 5 dup(0)

xx dw 0    ; 將x完成拼接操作存入xx (將xx當作要被轉換的資料處理)

y db 5 dup(0)   ; 存轉換後的10進製數

str1 db 'input 4 digits: $'

str2 db 0ah, 0dh, 'the bcd code is: $'  ; 實際列印出來的是bcd碼表示的10進製數

str3 db 0ah, 0dh, 'input error! try again! $'

data ends

stack segment para stack

dw 20h dup(0)

stack ends

code segment

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

begin: mov ax, data

mov ds, ax

mov dx, offset str1

mov ah, 09h

int 21h

mov dx, offset x

mov ah, 0ah

int 21h

mov di, offset x

inc di

mov bl, [di]

cmp bl, 4   ; 檢測輸入是否為4位

je next

jmp error

next: inc di

push di

call tes   ; 檢測輸入有效性並轉化ascii為數字

pop di

call change   ; 將x按位拼接到xx中,使之成為長度為乙個字的16進製制數

mov dx, xx

mov di, offset y

mov cx, 0h   ; 存放10進製數的位數

lop2: mov ax, dx   ; 被除數放入ax

mov dx, 0h  

mov bx, 10

div bx    ; 除以10,餘數在dx中,商在ax中

xchg ax, dx   ; 交換餘數和商的位置

add al, 30h   ; 把餘數轉化為ascii碼

mov [di], al   ; 存餘數

inc di

inc cx    ; 位數計數器加1

cmp dx, 0h    ; 如果商為0,則輸出

jnz lop2

mov dx, offset str2

mov ah, 09h

int 21h

lop3: dec di    ; cx(10進製數的位數)控制此迴圈

mov dl, [di]   ; 依次輸出

mov ah, 02h

int 21h

loop lop3

mov dl, 'd'

int 21h

jmp over

error: mov dx, offset str3

mov ah, 09h

int 21h

over: mov ah, 4ch

int 21h

tes proc    ; 檢測與轉換輸入的子程式

mov cx, 4

lop0:  mov ax, 0

mov al, [di]      ; 判斷輸入的不同情況

cmp al, '0'

jb error

cmp al, 'f'

ja error

cmp al, '9'

jbe part1 

cmp al, 'a'

jb error

cmp al, 'f'

jbe part2

cmp al, 'a'

jb error

cmp al, 'f'

jbe part2

part1:  and al, 0fh      ; 開始轉化為數值

mov [di], al      ; 替換原始ascii碼

jmp continue1 

part2:  sub al, 07h

jmp part1

continue1:  inc di

loop lop0

rettes endp

change proc

mov bx, 0

mov cx, 3   ; 總共移位3次,或運算拼接4次

lop1: push cx

or bl, [di]   

mov cl, 4

shl bx, cl   ; 左移4個2進製位(1個16進製制位)

inc di

pop cx

loop lop1

or bl, [di]   ; 多進行或運算一次

quit: mov xx, bx   ; 拼接完成存入bx

retchange endp

code ends

end begin

彙編作業(2006 5 3)

題目 從鍵盤讀入兩個一位十六進製制數,根據條件,以十六進製制輸出計算結果 a 計算x y b 計算 x y c 計算x y d 計算x y 源程式 data segment x db y db z db 2 dup 0 list db 0123456789abcdef 檢測輸入是否為有效數字的儲存列...

彙編作業(2006 5 9)

要求 鍵盤輸入1 9,根據輸入列印含有 的三角陣型,比如輸入為3,第一行列印乙個 第二行列印3個 第三行列印5個 要求每行中間的 在同一列上。依此類推。源程式 data segment str db input number of the lines from 1 to 9 endl db 0ah,...

彙編作業(2006 5 10)

題目 計算x的n次方,x與n為從鍵盤讀入的十進位制數,結果以十六進製制輸出 源程式 data segment str1 db input x 1 5 str2 db 0ah,0dh,input n 1 5 str3 db 0ah,0dh,the result is x db 0 n db 0 y d...