匯編語言上機(jī)考試三星題1(二刷)

1.? ? ?在多模塊設(shè)計(jì)中,主模塊中調(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)志進(jìn)行比較,在依次和關(guān)鍵字進(jìn)行比較。

2.找到程序的入口地址使用? MOV BX ,OFFSET BUF1語句

3.顯示四位16進(jìn)制數(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,因?yàn)锳X,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? ? ? ? ? ? ? ? //這一行不加上去會報(bào)錯,我也不知道為什么。


執(zhí)行結(jié)果


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容