程式設計題目解析

草履虫1023發表於2024-06-14

程式設計題目解析

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

相關文章