王爽組合語言實驗十第三題

2021-09-26 00:13:48 字數 2297 閱讀 5147

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