汇编实验1遇到的问题及解决之记录(以及尚未解决的疑惑,大神可以帮帮看看吗)
比較有用的參考資料的網址:
https://www.doc88.com/p-6601373721664.html
http://www.rsdown.cn/down/168010.html (masm和link的下載)
1.CLD匯編語言是什么意思
答:匯編語言CLD(cleardirection)清除方向標志,cld即告訴程序si,di向前移動,相反功能指令是STD,將方向標志位DF置1, 在字串操作中使SI或DI的地址指針自動遞減,字串處理由后往前。
CLD指令功能:
將標志寄存器Flag的方向標志位DF清零。
在字串操作中使變址寄存器SI或DI的地址指針自動增加,字串處理由前往后。
2.匯編問題rep movsb 是什么意思?
答:先說說MOVSB(MOVe String Byte):即字符串傳送指令,這條指令按字節傳送數據。通過SI和DI這兩個寄存器控制字符串的源地址和目標地址,比如DS:SI這段地址的N個字節復制到ES:DI指向的地址,復制后DS:SI的內容保持不變。
而REP(REPeat)指令就是“重復”的意思,術語叫做“重復前綴指令”,因為既然是傳遞字符串,則不可能一個字(節)一個字(節)地傳送,所以需要有一個寄存器來控制串長度。這個寄存器就是CX,指令每次執行前都會判斷CX的值是否為0(為0結束重復,不為0,CX的值減1),以此來設定重復執行的次數。因此設置好CX的值之后就可以用REP MOVSB了。
CLD(CLear Direction flag)則是清方向標志位,也就是使DF的值為0,在執行串操作時,使地址按遞增的方式變化,這樣便于調整相關段的的當前指針。這條指令與STD(SeT Direction flag)的執行結果相反,即置DF的值為1。
;example:把當前數據段中偏移1000H開始
;的100個字節數據傳送到偏移2000H開始的
;單元中
cld ;指針增值
push DS ;當前數據段,因此壓入棧中保存
pop ES ;使ES=DS
mov SI,1000H ;源串指針初值
mov DI,2000H ;目的串指針初值
mov CX,100 ;循環次數
Next:
lodsb ;取一個字節
stosb ;存一個字節
loop Next ;循環CX次
;以下程序片段與上面的等價:
cld ;地址指針增值
……
mov CX,100 ;循環CX次
Next:
movsb ;每次傳送一字節數據
loop Next
;或者用更簡單的寫法:
cld
……
mov CX,100
rep movsb
3.DOSBOX 0.74版怎么用?
https://jingyan.baidu.com/article/9f63fb917e3beac8410f0e58.html
https://www.baidu.com/link?url=O8WAHuqaAHJkZiKWQh5iywPI-Q-nOhQhC_RKrSL72Et8FdZ_ogLidg3Bi0USAtOIWoHYFY4Zn1AtMLlrh0GtCK&ie=utf8&f=8&ch=2&tn=98010089_dg&wd=dosbox怎么樣運行&oq=dosbox怎么樣運行&rqlang=cn&oe=utf8
https://www.baidu.com/link?url=mL9nrDlS9T1uuIDsjtrYairhhnu-HxJE_tOzEb6G9yzGS6JzQ6aO5thhTWCoqZXK8wapoOl-3cEnuILrKo_esMmDqV5C8mW-0KmjeEjJPQO&wd=&eqid=8c242ed400bc3b4a000000035d9d3c69
在輸入框狀態下z:>mount c d:\dos
"z:>" 這個是提示符, “c”作為虛擬C盤 ,“d:\dos”你要虛擬的文件夾位置。
簡單的說,你把你要虛擬的文件夾位置換掉上面的;
運行DOSXBOX之後
Z:\ >mount c c:\masm5 按下ENTER
鍵入
C:\ 按下ENTER(此時的DOSBOX中的C磁盤就是masm5的文件夾了)
4.匯編語言中 mount d d:\是什么意思?
答:這個應該不是匯編指令吧
應該是dosbox的指令吧,用來把自己d盤掛載到dosbox的d盤吧
······························································
加載目錄到c盤
輸入c:\ 進入到c盤,看到我們已經在c盤(D:\Masm\c)下了。(那句mount c D:\Masm\c就是把D:\Masm\c這個目錄當作c盤目錄)
·······················································
5.libpng warning: iCCP: known incorrect sRGB profile
原因:libpng 對GIMP生成的png報錯 libpng warning: i: known incorrect sRGB profile 原因是新版的libpng增強了檢查,發出警告。此警告可以忽略。
2019/10/13 補充
6.鏈接程序link.exe是怎么知道你是否定義了堆棧段呢?它是怎么判斷并發出警告的呢?
答:你定義了堆棧段沒有,很容易看出來。
stacksg segment stack中最后的stack讓連接程序將定義的堆棧段當堆棧段用了。
參考文章,寫的很好:
https://m.aliyun.com/yunqi/articles/75835
7.當在DOSBOX打開的情況下,在MASM文件夾下面又放入了新的文本文件(.txt)時,
這時用copy xx.txt xx.asm命令,會報出xx.txt文件找不到的提示,所以,要關閉DOSBOX的窗口,再次重新打開才可以正確識別出新的文件。
(其中sy1.txt是打開DOSBOX后新放入文件夾的,無法找到,重新打開DOSBOX就可以)
8.假如masm成功的話,也就是如果匯編成功的話,會給出0警告0錯誤的提示,否則會給出存在的問題的提示,字體比較小,注意仔細看。
9.命令link,masm,可以寫上文件后綴,如.obj,.asm,也可以不寫。
10.當修改了源文件的文本文件后,還需要再次把它改名為.asm文件才行。否則,不copy,直接masm、link,執行,還是原來的結果,而不是期待的修改后的出現的結果,這期間,不需要重新打開DOSBOX。
尚未解決的疑惑
1.在.txt文件中寫匯編時,注釋可以是中文注釋嗎?
(這個應該沒有影響的呀,為什么自己一個文件里寫了很多中文注釋,無法形成.obj文件呢?報出錯誤:Out Of Memory,還是這個錯誤是別的原因導致的呢?)
總結
以上是生活随笔為你收集整理的汇编实验1遇到的问题及解决之记录(以及尚未解决的疑惑,大神可以帮帮看看吗)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Quartus中常见错误·
- 下一篇: Glut处理鼠标事件:函数glutMou