子程序代碼:
stack segment
db 8 dup (0)
stack ends
show_str: push cx
push bx
push si
push di
push es
mov ax,0b800h
mov es,ax
mov al,0a0h # 一行160字節(jié)
dec dh # 如果需要在第n行開始顯示,則前面的n-1行全部計(jì)入偏移量
mul dh # al * dh,計(jì)算行偏離
mov bx,ax # 將偏離量傳入bx
# 以上四句計(jì)算行偏移
mov al,2 # 每一列2字節(jié)
mul dl # al * dl,計(jì)算列偏移
dec ax,2 # 在第n列開始顯示,則前面n-1列全部計(jì)入偏移量
add bx,ax # 在第n行第m列顯示,需要偏移:(n-1的行偏移) + (m-1的列偏移)
# 以上四句,前三句計(jì)算列偏移,第四句計(jì)算總偏移
mov di,0
mov al,cl # 顏色傳入al
mov ch,0 # ch傳0
s: mov cl,ds:[si] # 字符傳入cl,因cl已經(jīng)傳入al,不必?fù)?dān)心顏色數(shù)據(jù)被覆蓋
jxcz ok # 判斷是否已經(jīng)到了字符的0字節(jié)尾部
mov es:[bx + di],cl # 字符傳入
mov es:[bx + di + 1],al # 顏色傳入
# 以上四句在需要顯示的n行m列進(jìn)行字符串及顏色處理
inc si # 字符串偏移自增
add di,2 # 處理字符串的偏移
jmp short s # 因沒有利用loop,故用 jmp short 標(biāo)號 進(jìn)行轉(zhuǎn)移
ok: pop es
pop di
pop si
pop bx
pop cx
ret
子程序代碼:
stack segment
db 8 dup (0)
stack ends
divdw: push ax # 被除數(shù)低位壓棧
mov ax,dx # 將被除數(shù)高位傳入ax
mov dx,0
div cx # ax/cx,公式中的H/N
mov bx,ax # 描述性運(yùn)算符int()處理
# 以上兩句處理了公式int(H/N)部分
pop ax # 被除數(shù)低位出棧,此時(shí)dx中為rem(H/N),正好滿足公式中[rem(H/N)*65536 + L]
div cx # (dx*16 + ax)/cx,公式中的[rem(H/N)*65536 + L]/N
mov cx,dx # 余數(shù)傳給cx
mov dx,bx # 將之前的int(H/N)部分傳給dx
ret
子程序代碼:
dtoc: push ax
push si
push di
push cx
push dx
mov di,0
s0: mov cx,10d # 將10傳入cx
mov dx,0
div cx
mov cx,ax # 商為0,則證明完成了求值
jxcz s1
add dx,30h # 將余數(shù)轉(zhuǎn)換為ACSII
push dx # 轉(zhuǎn)換完成的數(shù)據(jù)壓棧
inc di
jmp short s0
s1: add dx,30h # 記錄最后一個(gè)余數(shù),并轉(zhuǎn)化ACSII
push dx
inc di
mov cx,di # 將記錄的數(shù)據(jù)位數(shù)傳入cx,作為s2的循環(huán)次數(shù)
s2: pop ax # 將轉(zhuǎn)換完的字符 出棧
mov ds:[si],al # ACSII 只占用了低8位,配合show_str中的: mov cl,ds:[si]
inc si
loop s2
pop dx
pop cx
pop di
pop si
pop ax
ret
show_str:在第一小節(jié)中已給出
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。