comment !
數值顯示,將data段中的資料以十進位制的形式顯示出來
!assume cs:code,ds:data,ss:stack
data segment
dw 123,12666,1,8,38,55,6,77,78,89
data ends
ascii segment
dw 32 dup(0)
ascii ends
stack segment
dw 10000 dup(0)
stack ends
code segment
start: mov ax,data
mov ds,ax
mov si,0 ;字串首位址 ds:si
mov ax,ascii
mov es,ax
mov di,0 ;ascii存放的記憶體空間
mov ax,stack
mov ss,ax
mov sp,0ffffh
call far ptr dtoc ;子程式:將字串在螢幕上以十進位制輸出。
mov dh,8 ;行號
mov dl,3 ;列號
mov cl,2 ;字型顏色
call far ptr show_str
mov ax,4c00h
int 21h
dtoc: push si
push di
action: mov bp,0 ;清空記錄入棧的次數
mov ax,ds:[si] ;將第乙個字串取出來放到ax中
mov cx,ax ;判斷一下是否已經取完最後乙個字串。
jcxz return ;如果已經取完字串,那麼跳轉到標號處
convert: mov dx,0 ;將dx置為0,以便取字串的餘數。
mov bx,0ah ;除數,用於求出餘數。
div bx ;求出餘數
add dx,30h
push dx ;將轉換後的ascii碼壓入棧中。
inc bp ;記錄幾次入棧。
mov cx,ax
jcxz movascii ;判斷乙個字串是否轉換完,如果轉換完就跳轉到movascii標號。
jmp convert ;跳轉到convert將字串逐個轉換完。
movascii: mov cx,bp
l1: pop ax
mov es:[di],al
inc di
loop l1
mov al,20h
mov es:[di],al
inc di
add si,2
jmp action
return:
pop di
pop si
mov ax,ascii
mov ds,ax
mov di,0 ;ascii存放的記憶體空間
retf
show_str: mov ax,0b800h
mov es,ax
mov di,0 ;設定es:di指向視訊記憶體位址
mov ah,0
mov al,cl ;顏色存放到al中
push ax ;將顏色入棧
mov al,dl ;列號存放到al中
push ax ;將列號入棧
mov al,dh ;將行號存放到al中
mov ch,0a0h ;行數
mul ch
sub ax,0a0h ;求出行號的首位址
pop dx ;從棧中取出列號
dec dx
add dx,dx ;求出列號的首位址
add ax,dx ;求出幾行幾列的首位址
mov di,ax ;設定視訊記憶體的起始位址
pop ax ;從棧中取出顏色
j1: mov cl,ds:[si] ;取字串的第乙個字元放到ah中
mov es:[di],cl ;將ah中的資料存放到視訊記憶體處,用於顯示字元
mov es:[di+1],al ;將字元顏色存放到視訊記憶體
inc si
add di,2
mov ch,0
jcxz return2 ;判斷是否取到最後乙個字元0.為0則結束程式,不為0則繼續向下取
jmp short j1
return2: retf
code ends
end start
我將棧設定為64kb大小,這樣就可以顯示更多的字元了。做了這題花了我三個多小時。? 王爽《組合語言》實驗十
實驗十 3.數值顯示 以下程式附帶測試程式 1 名稱 dtoc2 功能 將dword型資料轉變為表示十進位制數的字串,字串以0為結尾3 引數 ax dword型資料低字4 dx dword型資料高字5 ds si指向字串的首位址6 返回 無 7 assume cs code 8data segmen...
王爽 組合語言 實驗10 1
assume cs code,ds data data segment db welcome to masm 0 data ends code segment start mov dh,8 行號 mov dl,3 列號 mov cl,2 顏色 mov ax,data mov ds,ax mov si...
王爽 組合語言 實驗7
assume cs codesg,ds data ss stack data segment db 1975 1976 1977 1978 1979 1980 1981 1982 db 1983 1984 1985 1986 1987 1988 1989 1990 db 1991 1992 1993...