李忠組合語言 初學 第五天

2021-10-09 14:30:42 字數 4119 閱讀 8076

書籍第七章

之前游刃有餘,現在呵呵,看完了第八章,也只是大概總結了下,明天逮著原始碼死薅。

主要是身體不舒服,難受的很。不知道還能抗多少天。

## 學習內容

型別:組合語言

進度:初學

天數:第五天

日期:2023年9月19日

書籍:李忠組合語言

內容:書籍 第七章、第八章

[25分鐘] 14:10-14:35 anki卡片學習、複習

[05分鐘] 14:35-14:40 anki卡片所學內容補充、新增、修改

[10分鐘] 14:40-14:50 xmind思維導圖補充、新增、修改

【40分鐘】   回顧/複習
[05分鐘] 14:50-14:55 csdn部落格新增學習記錄

[05分鐘] 14:55-15:00 有道雲筆記新增學習筆記

[10分鐘] 15:00-15:10 瀏覽新聞部落格,擴充視野

[10分鐘] 15:10-15:20 偷閒雜事處理

[60分鐘] 15:50-16:50 預習所學知識 (第七章、第八章)

【120分鐘】   預習/預備
[70分鐘] 16:50-18:00 第一次學習

學習內容:7.1-7.2 研究**清單7-1

[10分鐘] 18:00-18:10 休息

[20分鐘] 18:10-18:30 第二次學習

學習內容:7.3-7.52

[60分鐘] 18:30-19:30 休息

[90分鐘] 19:30-21:00 第三次學習

學習內容:7.53-本章習題

[10分鐘] 21:00-21:10 休息

[50分鐘] 21:10-22:00 第四次學習

[60分鐘] 22:00-23:00 第五次學習

學習內容: 8.2.2-8.33

[40分鐘] 23:00-23:40 第六次學習

學習內容: 8.3.4-8.3.6

【250分鐘】   學習
第 七 章 習 題

1.修改**清單 7-1 的第 31~37 行,使用 loop 指令來計算累加和。要求:cx 暫存器既用來

控制迴圈次數,同時還用來作為被累加的數。

;**清單7-1

;檔名:c07_mbr.asm

;檔案說明:硬碟主引導扇區**

;建立日期:2020-09-19 16:50

jmp near start ;為什麼要寫跳轉 因為中間定義了乙個資料段

message db '1+2+3+...+100='

;這個是顯示的字串段

start:

;設定資料**

mov ax,0x7c0

mov ds,ax

;設定資料去處

mov ax,0xb800

mov es,ax

mov di,0 ;設定資料去處段首位址

mov cx,start-message ;設定迴圈變數 start為**段的首位址 message為資料段的首位址

;顯示問題字串

show_str:

mov al,ds:[si]

mov es:[di],al

inc si

add di,2

loop show_str

;計算1到100的和

xor ax,ax ;等同於 mov ax,0 只是更快更小

mov cx,100 ;設定迴圈變數 因為題目要求cx 暫存器既用來控制迴圈次數,同時還用來作為被累加的數。所以只要這裡設定100.ax每次加cx的值,cx每次loop迴圈自動減1直到0為止,剛好完成功能需要。

calculate:

add ax,cx ;用累加器ax來記錄迴圈加值

loop calculate

;顯示答案字串

;以下計算累加和的每個數字

xor cx,cx ;設定堆疊段的段基位址

mov ss,cx

mov sp,cx

;獲取數的每個數字

xor cx,cx

mov bx,10

get_answre:

inc cx

xor dx,dx

div bx

or dl,0x30

push dx

cmp ax,0

jne get_answre

;顯示數的每個數字

show_answre:

pop ax

mov es:[di],al

add di,2

loop show_answre

jmp near $

times 510-($-$$) db 0

db 0x55,0xaa

2.在 16 位的處理器上,做加法的指令是 add,但它每次只能做 8 位或 16 位的加法。除此之外, 還有乙個帶進製加法指令

adc(add with carry),它的指令格式和 add 一樣,目的運算元可以是 8 位 或 16

位的通用暫存器和記憶體單元,源運算元可以是與目的運算元寬度一致的通用暫存器、記憶體單元

和立即數(但目的運算元和源運算元同為記憶體單元的除外)。不過,adc 指令在執行的時候,除了將目

的運算元和源運算元相加,還要加上當前標誌暫存器的 cf 位。也就是說,視 cf 位的狀態,還要再 加 0 或者加 1。這樣一來,用 adc

指令配合 add 指令,就可以計算 16 位以上的加法。 adc 指令對 of、sf、zf、af、cf 和 pf 的影響視計算結果而定。

現在,請編寫一段主引導扇區程式,計算 1 到 1000 的累加和,並在螢幕上顯示結果。

jmp near start             ;計算1+2

+3+.

..1000的大小

message db '1+2+3+...+1000='

start:

mov ax,

0x7c0

mov ds,ax

mov ax,

0xb800

mov es,ax

mov si,message

mov di,

0 mov cx,start-message

cld@g: movsb

mov byte[es:di]

,0x07

inc di

loop @g

xor ax,ax

xor dx,dx

mov cx,

1000

@f: add ax,cx

adc dx,

0x0000

loop @f

;設定ss和sp的位置

xor cx,cx

mov ss,cx

mov sp,cx

xor cx,cx

mov bx,

10;拆解答案

@a: inc cx

div bx

or dl,

0x30

push dx

xor dx,dx

cmp ax,

0x0000

jne @a

;以下顯示各個數字

@b: pop dx

mov [es:di]

,dl inc di

mov byte[es:di]

,0x07

inc di

loop @b

jmp near $

times 510

-($-$$) db 0

dw 0xaa55

李忠組合語言 初學 第十五天

第十六章 第十七章 今天渾水摸魚,什麼都沒乾,什麼都沒學會。型別 組合語言 進度 初學 天數 第十五天 日期 2020年09月29日 書籍 李忠組合語言 相關 無 內容 李忠組合語言 第十六章 第十七章 25分鐘 13 20 13 45 anki卡片學習 複習 05分鐘 13 45 13 50 an...

李忠組合語言 初學 第三天

書籍第四章 第五章 40分鐘 14 50 15 30 anki卡片學習 複習 10分鐘 15 30 15 40 anki卡片所學內容補充 新增 修改 10分鐘 15 40 15 50 xmind思維導圖補充 新增 修改 60分鐘 回顧 複習 50分鐘 預習 預備 40分鐘 16 40 17 20 第...

初學Python第五天

繼上次10.3賦值運算子之後 4 位運算子 定義 把數字看做二進位制進行計算的運算子。例如 1 按位 與 運算子 只要兩個對應的二進位制位有乙個為0,則該位結果為0,否則為1 60 13 輸出結果12,二進位制解釋 00001100。2 按位 或 運算子 只要兩個對應的二進位制位有乙個為1,則該位結...