日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第六章 相同的功能,不同的代码

發布時間:2023/12/10 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第六章 相同的功能,不同的代码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本章的代碼和上一章實現的是同樣的功能,但是本章采用更合理的技巧去組織代碼,使代碼更通用、易懂。具體代碼貼在下面,

;代碼清單6-1;文件名:c06_mbr.asm;文件說明:硬盤主引導扇區代碼;創建日期:2011-4-12 22:12 jmp near startmytext db 'L',0x07,'a',0x07,'b',0x07,'e',0x07,'l',0x07,' ',0x07,'o',0x07,\'f',0x07,'f',0x07,'s',0x07,'e',0x07,'t',0x07,':',0x07number db 0,0,0,0,0start:mov ax,0x7c0 ;設置數據段基地址 mov ds,axmov ax,0xb800 ;設置附加段基地址 mov es,axcldmov si,mytext mov di,0mov cx,(number-mytext)/2 ;實際上等于 13rep movsw;得到標號所代表的偏移地址mov ax,number;計算各個數位mov bx,axmov cx,5 ;循環次數 mov si,10 ;除數 digit: xor dx,dxdiv simov [bx],dl ;保存數位inc bx loop digit;顯示各個數位mov bx,number mov si,4 show:mov al,[bx+si]add al,0x30mov ah,0x04mov [es:di],axadd di,2dec sijns showmov word [es:di],0x0744jmp near $times 510-($-$$) db 0db 0x55,0xaa

實驗現象:



實驗體會:

有了王爽《匯編語言》的基礎,讀第二部分8086模式的代碼沒有任何難度,有幾個地方需要說明

a)

jns show?當顯示完最后一個數位后, SI 的內容是零。執行 dec si 指令后,由于產生了借位,實際的運算結果是 0xffff(SI 只能容納 16 個比特),因其最高位是“1”,故處理器將標志位 SF 置“1”,表明當前 SI 中的結果可以理解為一個負數(-1)。于是,執行 jns show 時,條件不滿足,接著執行后面第 51 行的指令。

b)

jmp near $?整個程序到此結束。為了使處理器還有事做,源程序第 53 行,是一個無限循環。 NASM編譯器?供了一個標記“$”,該標記等同于標號,你可以把它看成是一個隱藏在當前行行首的標號。因此, jmp near $的意思是,轉移到當前指令繼續執行,它和infi: jmp near infi是一樣的,沒有區別,但不需要使用標號,更不必為給標號起一個有意義的名字而傷腦筋。

c)

times 510-($-$$) db 0

db 0x55,0xaa

源程序第 55 行,用于重復偽指令“db 0”若干次。重復的次數是由 510-($-$ $)得到的,除去 0x55 和 0xAA 后,剩余的主引導扇區內容是 510 字節;$是當前行的匯編地址; $ $是 NASM編譯器?供的另一個標記,代表當前匯編節(段)的起始匯編地址。當前程序沒有定義節或段, 就默認地自成一個匯編段,而且起始的匯編地址是 0(程序起始處)。這樣,用當前匯編地址減去程序開頭的匯編地址(0),就是程序實體的大小。再用 510 減去程序實體的大小,就是需要填充的字節數。就像處理器把內存劃分成邏輯上的分段一樣,源程序也應當按段來組織,劃分成獨立的代碼段、數據段等。














總結

以上是生活随笔為你收集整理的第六章 相同的功能,不同的代码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。