1. 程式人生 > >彙編複習2

彙編複習2

彙編複習2

串處理指令

1. MOVS:傳送位元組,字,雙字,從SI所指的串中,複製到DI所指的串,傳遞以後,SI,DI的值都會被修改,向前或向後取決於DF的值。 2. MOVSB,MOVSW,MOVSD則直接指定了一次傳輸的大小(他們已經默認了使用SI,DI),MOVS需要自己設定,他們與REP配合使用,可以將整個串都複製,REP的迴圈次數,取決於CX。 3. CLD 使DF為0,STD使DF為1 4. STOS :傳入串指令,將AL,AX,EAX中的內容傳入由DI指向的地方,傳入後DI將會改變 5. LODS:取串指令,將SI所指的內容放到AL,AX,EAX中,同樣,傳入後,SI的值將改變 6. INS DST,DX:將埠號在DX中的I/O空間的位元組,字,雙字傳入DI所指地方。 7. OUTS DX,SRC; 8. REPE,REPZ相等/為0時重複(CX=0或 CF=0(不相等)使退出) 9. CMPS 串比較指令,SI,DI所指的相減,不儲存結果,只改變標誌位。 10. SCAS :串掃描指令,將DI所指的內容與AL,AX,EAX進行比較,只保留標誌位 比較原理還是相減,最後看ZF 11. 當使用REP這些重複語句時,需要注意,及時匹配成功以後,DI,SI的值還是會跳向下一個位置。 12. 串處理指令使用的注意事項:他們在不同的段直接傳送資料或比較資料,如果需要在同一段內處理資料,可以在DS和ES中設定同樣的地址,或者在源運算元中使用段跨越字首來實現。

控制轉移指令

1. 無條件跳轉JMP:段內轉移:指在同一段的轉移,此時只要改變IP的值就行。段間轉移,則還需要改變CS暫存器的內容。

易錯點

1. 有效地址和實體地址,有效地址是指沒有加上段地址偏移的地址,實體地址是確定的地址。 2. ASSUME偽操作只是指定某個段分配給哪一個段暫存器。它並不能把段地址裝入暫存器中,所在段地址中,還需要把段地址給暫存器。如果有堆疊段,也需要把段地址裝入SS中,但是程式碼段CS卻不需要這樣,因為它在程式初始化時完成。 3. EQU 表示式賦值,將變數或表示式的結果賦給它。 4. $ 在指令中,它表示本條指令的第一個位元組的地址,用在偽操作中,它表示地址計數器的當前值。 5. ORG用來設定當前地址計數器的值 6. 數值送回操作:type 返回該變數的位元組數,length 返回多少個 dup,size返回 length*type,offset 返回變數的首地址。seg 返回段地址。 7. MOV [BX],[SI] 是錯誤的,因為他們等價於兩個儲存器運算元(使用偏移,段地址的都屬於儲存器運算元) 8. MOV AX,[SI][DI],[SI],[DI]不能同時使用,AX不能使用段超越, 9. CS不能做目的暫存器 10. 立即數不能做目的運算元 ,cmp 15,ax 11. bp:是基址指標,段地址預設在SS中, bp 是一個字大小16位 12. DX不能用於儲存器定址,暫存器相對定址時,只能用 bx、si、di、bp,不能使用其它的暫存器。 13. JMP 的跳轉, 可以short OPR,near ptr OPR, word ptr OPR,far ptr....