編寫(xiě)一個(gè)子程序UPPER,實(shí)現(xiàn)把寄存器AL中存放的字符變大寫(xiě)。解:
;子程序功能:把AL中存放的字符變大寫(xiě)
;入口參數(shù):AL
;出口參數(shù):AL
;算法描述:判斷AL中字符必須在’a’~’z’之間才能把該字符變?yōu)榇髮?xiě)
UPPERPROC
CMPAL, ’a’;書(shū)寫(xiě)’a’的ASCII碼61H也可以
JBover
CMPAL, ’z’
JA over
SUBAL, 20H;書(shū)寫(xiě)指令A(yù)ND AL, 0DFH也可以
over:RET
UPPERENDP
例7.2 編寫(xiě)一個(gè)求字符串長(zhǎng)度的子程序StrLen,該字符串以0為結(jié)束標(biāo)志,其首地址存放在DS:DX,其長(zhǎng)度保存在CX中返回。
解:
;子程序功能:求字符串的長(zhǎng)度
;入口參數(shù):DS:DX存放字符串的首地址,該字符串以0為結(jié)束標(biāo)志
;出口參數(shù):CX存放該字符串的長(zhǎng)度
;算法描述:用BX來(lái)指針來(lái)掃描字符串中的字符,如果遇到其結(jié)束標(biāo)志,則停止掃描字符串操作
StrLenPROC
PUSHAX
PUSHBX;用堆棧來(lái)保存子程序所用到的寄存器內(nèi)容
XORCX, CX
XORAL, AL
MOVBX, DX
again:CMP[BX], AL
JZover
INCCX;增加字符串的長(zhǎng)度
INCBX;訪問(wèn)字符串的指針向后移
JMPagain
over:POPBX;恢復(fù)在子程序開(kāi)始時(shí)所保存的寄存器內(nèi)容
POPAX
RET
StrLenENDP
;子程序功能:把AL中存放的字符變大寫(xiě)
;入口參數(shù):AL
;出口參數(shù):AL
;算法描述:判斷AL中字符必須在’a’~’z’之間才能把該字符變?yōu)榇髮?xiě)
UPPERPROC
CMPAL, ’a’;書(shū)寫(xiě)’a’的ASCII碼61H也可以
JBover
CMPAL, ’z’
JA over
SUBAL, 20H;書(shū)寫(xiě)指令A(yù)ND AL, 0DFH也可以
over:RET
UPPERENDP
例7.2 編寫(xiě)一個(gè)求字符串長(zhǎng)度的子程序StrLen,該字符串以0為結(jié)束標(biāo)志,其首地址存放在DS:DX,其長(zhǎng)度保存在CX中返回。
解:
;子程序功能:求字符串的長(zhǎng)度
;入口參數(shù):DS:DX存放字符串的首地址,該字符串以0為結(jié)束標(biāo)志
;出口參數(shù):CX存放該字符串的長(zhǎng)度
;算法描述:用BX來(lái)指針來(lái)掃描字符串中的字符,如果遇到其結(jié)束標(biāo)志,則停止掃描字符串操作
StrLenPROC
PUSHAX
PUSHBX;用堆棧來(lái)保存子程序所用到的寄存器內(nèi)容
XORCX, CX
XORAL, AL
MOVBX, DX
again:CMP[BX], AL
JZover
INCCX;增加字符串的長(zhǎng)度
INCBX;訪問(wèn)字符串的指針向后移
JMPagain
over:POPBX;恢復(fù)在子程序開(kāi)始時(shí)所保存的寄存器內(nèi)容
POPAX
RET
StrLenENDP

