⑴ 匯編程序段中數據段的定義
DATASEGMENT
STR1DB'whatisyourname?',13,10,'$'
CNEQU$-STR1
STR2EQUSTR1+CN-5
DATAENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA,ES:DATA
START:MOVAX,DATA
MOVDS,AX
MOVES,AX
MOVDX,OFFSETSTR1
MOVAH,9
INT21H
MOVSI,OFFSETSTR1
MOVDI,OFFSETSTR2
MOVCX,CN
ADDSI,CN-1
ADDDI,CN-1
STD
REPMOVSB
MOVDX,OFFSETSTR2
INT21H
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
教材中有詳細的介紹,請認真閱讀,多復習。
es是附加數據段段地址,程序中是將數據段和附加數據段同段。
str1是21個位元組。
cn和str2在這里都是常量。
數據段中只定義了存儲區str1。(但又將str2當存儲區使用,這種用法少見,不要學!)
============================================================
以上操作的問題,str2並未申請緩沖區,在執行時有越界的風險!
============================================================
以下是規范的程序:
DATASEGMENT
STR1DB'whatisyourname?',13,10,'$'
CNEQU$-STR1
STR2DBCNDUP(?)
DATAENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA,ES:DATA
START:MOVAX,DATA
MOVDS,AX
MOVES,AX
LEADX,STR1
MOVAH,9
INT21H
LEASI,STR1
LEADI,STR2
MOVCX,CN
ADDSI,CN-1
ADDDI,CN-1
STD
REPMOVSB
LEADX,STR2
INT21H
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
⑵ 如何編寫完整的匯編程序
看很多資料的話就應該懂得寫啊,先看那個王爽的書咯,到第四章差不多就會寫了。努力啊