子程序的調(diào)用和返回指令子程序舉例

字號(hào):

編寫(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