1.? ? ?在多模塊設(shè)計中混卵,主模塊中調(diào)用內(nèi)部模塊buf1拙泽,buf2,buf3拯勉,buf4竟趾。主模塊根據(jù)鍵盤輸入的指令(如:a,b,c,d)調(diào)用上述對應(yīng)的子程序耙考,每個子程序的任務(wù)是顯示其入口地址。調(diào)用后繼續(xù)等待調(diào)用潭兽,若輸入ESC鍵(ASCII碼為1BH)則結(jié)束程序的執(zhí)行。請編寫完成該任務(wù)的程序山卦。
重要提示:
1.本題的思路是用dos ah=01H 讀取一個字符鞋邑,然后和結(jié)束標(biāo)志進行比較账蓉,在依次和關(guān)鍵字進行比較。
2.找到程序的入口地址使用? MOV BX 铸本,OFFSET BUF1語句
3.顯示四位16進制數(shù)的操作是,循環(huán)左移箱玷,然后將低兩位與0F與怨规,獲得當(dāng)前位的值锡足。
DATAS SEGMENT
? ? BUF DW BUF1,BUF2,BUF3,BUF4;此處輸入數(shù)據(jù)段代碼?
DATAS ENDS
STACKS SEGMENT
? ? ;此處輸入堆棧段代碼
STACKS ENDS
CODES SEGMENT
? ? ASSUME CS:CODES,DS:DATAS,SS:STACKS
MAIN PROC FAR
? ? MOV AX,DATAS
? ? MOV DS,AX
L:? MOV AH,01H? //用01調(diào)用得到鍵盤輸入的字符串
INT 21H
CMP AL,1BH? //比較是否是結(jié)束標(biāo)志
JZ END0
CMP AL,'a'? //比較關(guān)鍵字
JZ ISA
CMP AL,'b'
JZ ISB
CMP AL,'c'
JZ ISC
CMP AL,'d'
JZ ISD
JMP L? ?//去找下一個關(guān)鍵字
ISA:? ? ? //輸入了a
MOV DL,0AH? ? ?//先切換光標(biāo)
MOV AH,02H
INT 21H
MOV DL,0DH
MOV AH,02H
INT 21H
CALL BUF1? ? //執(zhí)行BUF1函數(shù)
JMP L? ? ? ? ? //取下一個值
ISB:
MOV DL,0AH
MOV AH,02H
INT 21H
MOV DL,0DH
MOV AH,02H
INT 21H
CALL BUF2
JMP L
ISC:
MOV DL,0AH
MOV AH,02H
INT 21H
MOV DL,0DH
MOV AH,02H
INT 21H
CALL BUF3
JMP L
ISD:
MOV DL,0AH
MOV AH,02H
INT 21H
MOV DL,0DH
MOV AH,02H
INT 21H
CALL BUF4
JMP L
END0:? ? ? ? ?//結(jié)束了
? MOV AH,4CH
? ? INT 21H
? ? RET? ? ? ? ? ? //RET一定不要忘記寫
MAIN ENDP? ? ?//主函數(shù)結(jié)束
BUF1 PROC NEAR? ? ? ?//BUF1的操作
MOV BX,OFFSET BUF1? ? //把入口地址賦給BX,這里只能賦給BX掰烟,因為AX,DX都會在DOS調(diào)用的時候被改變。
CALL DISP? //顯示函數(shù)
RET? //不要忘記返回
BUF1 ENDP
BUF2 PROC NEAR
MOV BX,OFFSET BUF2
CALL DISP
RET
BUF2 ENDP
BUF3 PROC NEAR
MOV BX,OFFSET BUF3
CALL DISP
RET
BUF3 ENDP
BUF4 PROC NEAR
MOV BX,OFFSET BUF3
CALL DISP
RET
BUF4 ENDP
DISP PROC NEAR
MOV CH,4? ? ?//一共四個數(shù)字
L1:? ? ??
MOV CL,4? ? //循環(huán)移位4次
ROL BX,CL
MOV AL,BL
AND AL,0FH? ? ? ?//取低位
CMP AL,9? ? ? ?//判斷是否是數(shù)字
JBE SHUZI
ADD AL,7? ? ? ? //是字母要加7沐批,詳見ASCII
SHUZI:? ? ? ?
ADD AL,30H? ? ? ? ? ? //加30H
MOV DL,AL
MOV AH,02H? ? ? ? ? //02輸出一個字符
INT 21H
DEC CH
CMP CH,0? ? ? ? ? ? ?//都輸出完了嗎纫骑?
JNZ L1
MOV DL,0AH? ? ? ? ? ?//別忘記換行
MOV AH,02H
INT 21H
MOV DL,0DH
MOV AH,02H
INT 21H
RET
DISP ENDP
CODES ENDS
END MAIN? ? ? ? ? ? ? ? //這一行不加上去會報錯,我也不知道為什么九孩。
執(zhí)行結(jié)果