彙編作業(2006 5 9)

2021-04-07 01:45:59 字數 1409 閱讀 6456

要求:鍵盤輸入1~9,根據輸入列印含有*的三角陣型,比如輸入為3,第一行列印乙個*,第二行列印3個*,第三行列印5個*,要求每行中間的*在同一列上。依此類推。

源程式:

data segment

str db 'input number of the lines(from 1 to 9): ', '$'

endl db 0ah, 0dh, '$'

line db 01h  ; 當前所在的行標號(初始化為1)

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 str

mov ah, 09h

int 21h

mov ah, 01h

int 21h

cmp al, 31h  ; 檢測無效輸入

jb over

cmp al, 39h

ja over

and ah, 00h

and al, 0fh

mov cx, ax  ; 外層迴圈次數置入cx

lop1: push cx   ; 外層迴圈次數暫存入堆疊

mov dx, offset endl ; 列印回車換行

mov ah, 09h

int 21h

mov bl, 00h  ; 控制引數(控制每行'*'的個數)

sub cx, 01h  ; 內層迴圈,每行的要列印的'空格'數比當前的cx值少1

cmp cx, 0  ; 若cx已經為0,則直接列印'*'

je lop3

lop2: mov dl, ' '

mov ah, 02h

int 21h

loop lop2

lop3: mov dl, '*'

mov ah, 02h

int 21h

inc bl   ; 統計個數加1

and al, 00h  ; 每行'*'的個數 = 當前行號 * 2 - 1

mov al, line

add al, al

dec al

cmp bl, al  ; 判斷'*'的個數是否符合要求

je next

loop lop3

next: add line, 01h  ; 行號加1

pop cx   ; 外層迴圈次數彈出

loop lop1

over: mov ah, 4ch

int 21h

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 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...

彙編作業(2006 5 19)

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 實際列印出來的...