組合語言學習(六)課程設計一

2021-08-21 19:07:08 字數 3438 閱讀 9615

本部分為第10章後的課程設計部分。

主要任務是將實驗七中的power idea公司的資料按照下圖格式在螢幕上顯示出來。

實驗思路:

1.整個**的主體是乙個遍歷21行的迴圈。

2.對於每行,最重要的工作就是將data部分的值複製到可在螢幕上顯示的記憶體位置。

設定暫存器,data段部分,段位址用ds暫存器,偏移位址用bpsi暫存器。

螢幕顯示部分,段位址用es暫存器,偏移位址用di暫存器。

注意每行開始時,需要重新給di賦值,每行結束後,需要對esbpsi進行處理。

3.對於每行要複製的資料,首先將年份複製過來,之後通過呼叫函式轉化和複製剩餘資料。

4.編寫子程式用於轉化資料:

呼叫之前編寫的防溢位函式,反覆除以10後加30h入棧,然後出棧存入記憶體相應位置。

5.一定不能忘記,每個字佔兩個字單元,第乙個位元組存ascii碼,第二個位元組存屬性。

出現過的問題:

1.似乎使用[bp]預設的是ss:[bp],所以最好加上ds:[bp]

2.按理說應該是從b8000h記憶體就可以顯示,但是實際實驗的時候b8168h都顯示不出來。當時不知道出錯原因,除錯了很久……現在猜想可能是除錯的時候按下回車鍵,導致往後退了幾行。

3.另外暫存器比較少,所以需要提前規劃好暫存器的使用。

**為:

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

data segment

year db '1975','1976','1977','1978','1979','1980','1981','1982','1983'

db '1984','1985','1986','1987','1988','1989','1990','1991','1992'

db '1993','1994','1995'

income dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514

dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000

employeenum dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226

dw 11542,14430,15257,17800

data ends

stack segment

db 64 dup (0)

stack ends

code segment

start: mov ax,data

mov ds,ax

mov ax,stack

mov ss,ax

mov sp,64

mov ax,0b82ah

mov es,ax

mov bl,7

mov bp,0

mov si,0

mov cx,21

l: mov di,8

push cx

mov cx,4

l1: mov ah,ds:[bp]

mov es:[di],ah

mov es:[di+1],bl

add bp,1

add di,2

loop l1

pop cx

mov di,8

sub bp,4

mov dx,ds:[bp+86]

mov ax,ds:[bp+84]

add di,20

call dtoc

mov dx,0

mov ax,ds:[si+168]

add di,20

call dtoc

mov dx,ds:[bp+86]

mov ax,ds:[bp+84]

div word ptr ds:[si+168]

mov dx,0

add di,20

call dtoc

mov ax,es

add ax,0ah

mov es,ax

add bp,4

add si,2

loop l

mov ax,4c00h

int 21h

dtoc: push cx

push si

mov si,di

mov cx,0 ;提前放入0,便於確認棧空

push cx

s: mov cx,10

call divdw

add cx,30h

push cx

mov cx,ax

add cx,dx

jcxz s1

jmp short s

s1: pop cx

jcxz ok

mov es:[si],cl

mov es:[si+1],bl

add si,2

jmp short s1

ok: pop si

pop cx

retdivdw: push bx

push si

mov bx,ax

mov ax,dx

mov dx,0

div cx

mov si,ax

mov ax,bx

div cx

mov cx,dx

mov dx,si

pop si

pop bx

ret

code ends

endstart

實驗結果:

還是滿有成就感的啦ヾ(@゜∇゜@)ノ

8086組合語言課程設計

最近自學了王爽的 組合語言 全書共有兩次課程設計,這是第乙個 給定資料如下 data segment db 1975 1976 1977 1978 1979 1980 1981 1982 1983 db 1984 1985 1986 1987 1988 1989 1990 1991 1992 db ...

《組合語言》課程設計1

最近在學習王爽老師的 組合語言 感覺十分有意思。花了乙個下午做了第十章的課程設計1,對於組合語言新手來說還是有點難的。下面把 貼出來吧。一共200多行,感覺有些地方寫麻煩了,還可以更靈活的應用迴圈assume cs codesg data segment db 1975 1976 1977 1978...

王爽《組合語言》課程設計一

assume cs code,ds data buf segment db 0a0h dup 0 buf ends data segment db 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 db 1985 1986 1987 1988 198...