170407 彙編 綜合練習 實驗7

2021-07-30 06:04:58 字數 2024 閱讀 3571

1625-5 王子昂 總結《2023年4月7日》 【連續第188天總結】

a.彙編第八章實驗100%

b.題:將給定的定義好的資料重新按格式寫入指定table段中,並計算21年中的人均收入

乍一看還是有點懵的,彙編的結構太混亂了。或者說太簡單了,全部由暫存器和記憶體單元構成。

慢慢理清思路,由於年份和總收入都佔4個位元組,而人數只佔2個位元組,因此不可能同用乙個暫存器來表示(因為長度不定)

那麼年份和總收入使用同乙個暫存器來指向,人數單獨使用另乙個暫存器來指向。每次迴圈以後對兩個暫存器分別增加乙個資料長度,同時令table段的指標增加16位即可。

所犯的錯:

附加段暫存器,即需要另外使用的段暫存器要使用es。es不可以直接與立即數發生關係,它只能由通用暫存器賦值

通用暫存器ax,dx在除法div命令時需要使用,因此不可作為跨越迴圈的變數;bx則是指向記憶體的暫存器,相當於指標;cx是迴圈計數作用。它們都有各自的作用,如果需要大量臨時儲存的值,開闢乙個記憶體空間通過棧來使用

本題暫不需要,暫存器勉強足夠使用。

**:assume cs:codesg,es:codesg

data segment

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

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

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

;年份dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514

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

;公司總收入

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

table segment

db 21 dup ('year summ ne ?? ')

table ends

codesg segment

start:mov ax,data

mov ds,ax

mov ax,table

mov es,ax

mov cx,21

;資料初始化

mov bx,0

mov si,168

;bx作為年份和總收入的指標,si作為雇員人數的指標

l:mov ax,[bx]

mov es:[0],ax

;把每組資料的年份的前兩個位元組送入**段,下同,分別是總收入的前兩個位元組、年份的後兩個位元組、總收入的後兩個位元組、雇員數,除法得到人均收入並送入**段

mov ax,[bx+84]

mov es:[5],ax

add bx,2

mov ax,[bx]

mov es:[2],ax

mov ax,[bx+84]

mov es:[7],ax

mov ax,[si]

mov es:[10],ax

mov ax,es:[5]

mov dx,es:[7]

div word ptr es:[10]

mov es:[13],ax

mov ax,es

inc ax

mov es,ax

add bx,2

add si,2

loop l

mov ax,4c00h

int 21h

codesg ends

end start

debug中,右側顯示ascii碼的結果,而不是值。因此在本題中只能用來檢查年份,收入、雇員數和人均收入的值都是以16進製制的形式儲存在記憶體中,需要自行計算檢查。

c.明日計畫

彙編第九章

實驗7 綜合練習

求 1 2 3 3 5 4 7 5 9 的前15項之和。1 include 2 void main 3 12 printf s f n s 後面輸出的是s,前面要寫出s的格式,浮點型 13 輸入10個整數,將它們從大到小排序後輸出 1 include 2 void main 3 16 printf ...

實驗 7 綜合練習 New

習題 一 填空 閱讀下列程式說明和程式,在可選答案中,挑選乙個正確答案。填補 1 2 3 4 處空白,並注釋說明為什麼。include void main printf sum f n s 用的是 f 二 填空 閱讀下列程式說明和程式,在可選答案中,挑選乙個正確答案。填補 1 2 3 4 處空白,並...

實驗5 8 綜合練習

實驗目的 進一步掌握迴圈結構的用法。實驗步驟 1.計算n!n 10000 的末尾有多少個零。1.1分析 可分二步。第一步求出n!存入變數fac中。第二步判斷fac的末尾有多少個零。測試資料。變數n的輸入值 預期的輸出 估計好多 估計好多 實驗的輸出 1.2分析 沒有必要非得求出n!以10!為例,把每...