程式設計題目解析
2024-06-14 11:33:44 星期五
假設資料項定義如下:DATA1 DB 'HELLO! GOOD MORNING!'
DATA2 DB 20 DUP(?)
用串操作指令編寫程式段,使其分別完成以下功能:
(1)從左到右將DATA1中的字串傳送到DATA2中。
(2)傳送完畢後,比較DATA1和DATA2中的內容是否相同
(3)把DATA1中的第3和第4位元組裝人AX。
(4)將AX的內容存人從DATA2+5開始的位元組單元中。
(1)從左到右將DATA1中的字串傳送到DATA2中
MOV AX,SEG DATA1 ;SEG是獲取標號的段地址,OFFSET是獲取標號的段間的地址,也就是偏移地址;
MOV DS,AX
MOV AX,SEG DATA2
MOV ES,AX ;目標串就是在ES段,將ES段初始化
LEA SI,DATA1 ;取偏移地址
LEA DI,DATA2 ;取偏移地址
MOV CX,20 ;串長度
CLD
REP MOVSB ;相當於迴圈指令,直到CX減到0
`
串操作指令要求:
(1) 源串預設在DS段(資料段),允許段重設,偏移地址為SI給出
(2) 目標串預設再ES段(附加段),不允許段重設,因此必須先將ES段初始化,偏移地址由DI給出
(3) 串長度值由CX給出
(4) 操作方向與DF有關係 DF=0,按照增地址依次修改,DF=1,按照減地址依次修改
(5) 可以使用重複字首 REP
`
(2)傳送完畢後比較DATA1和DATA2中的內容是否相同
LEA SI,DATA1
LEA DI,DATA2
MOV CX,20
CLD
REPE CMPSB
`
先取得偏移地址,將CX填入字元長度,設定比較方向為增地址方向
如果相等就重複 REPE CMPSB,依次比較一個B,直到CX減到0,結束
`
(3)把DATA1中的第3和第4位元組裝入AX
LEA SI,DATA1
ADD SI,2
LODSW
`
取得偏移地址再操作,SI開始存放的為字串首地址,+2 之後變為第三個字元存放位置
LOADSW:將串裝入AX或AL;STOS是將AX或AL串存入ES:DI指向的儲存單元
`
(4)將AX的內容存入從DATA2+5開始的位元組單元
LEA DI,DATA2
ADD DI,5
MOV CX,8 ; 20-5=15,0-15有16個,每次移動2B,移動8次就可以了
CLD
REP STOSW
LEA DI,DATA2
ADD DI,5
MOV CX,15 ;每次移動1B
CLD
REP STOSB