80x86組合語言:輸入數字,輸出對應月份的英文

baidu_知道發表於2016-01-25

;從鍵盤輸入1,2,3,4,5,6.....12,輸出相對應的月份的英文,

;eg,輸入5,則輸出may。

;不想輸入就輸入e或者E,結束程式。

;要求:輸入前有提示語。

;若輸入的是大於12或者小於0或者是字母,則顯示輸入錯誤。


;做而論道編寫的程式如下:


ASSUME  CS:CODE, DS:DATA

;---------------------------------

DATA SEGMENT        ;資料段

    STRING01  DB  13, 10, 'January   $'

CHANG  EQU  $ - STRING01

    STRING02  DB  13, 10, 'February  $'

    STRING03  DB  13, 10, 'March     $'

    STRING04  DB  13, 10, 'April     $'

    STRING05  DB  13, 10, 'May       $'

    STRING06  DB  13, 10, 'June      $'

    STRING07  DB  13, 10, 'July      $'

    STRING08  DB  13, 10, 'August    $'

    STRING09  DB  13, 10, 'September $'

    STRING10  DB  13, 10, 'October   $'

    STRING11  DB  13, 10, 'November  $'

    STRING12  DB  13, 10, 'December  $'


    MSG1  DB  13, 10, 'Input num (1~12, Others EXIT): $'

    X     DB  ?

    TEMP  DB  ?

DATA ENDS

;---------------------------------

CODE SEGMENT         ;程式碼段


START:

    MOV   AX, DATA

    MOV   DS, AX

;--------------------------------

IN_LOOP:

    LEA   DX, MSG1

    MOV   AH, 9

    INT   21H


    MOV   X,  0         ;資料清零.

    MOV   CX, 2         ;輸入2位

_INX:

    MOV   AH, 1         ;輸入單個字元.

    INT   21H

;--------------------------------

    CMP   AL, 13

    JE    EXIT_IN

    CMP   AL, '0'

    JB    _IN_ERR       ;小於'0',不是數字.

    CMP   AL, '9'

    JA    _IN_ERR

    SUB   AL, '0'       ;還原為數字

    MOV   TEMP, AL      ;暫存

    MOV   AL, x

    MOV   BL, 10        ;老資料乘以10

    MUL   BL

    ADD   AL, TEMP      ;加上新資料.

    MOV   x,  AL        ;儲存.

    LOOP  _INX          ;繼續輸入.

    JMP   EXIT_IN

;--------------------------------

_IN_ERR: 

    MOV   DL, 8

    MOV   AH, 2

    INT   21H

    MOV   DL, ' '

    INT   21H

    MOV   DL, 8

    INT   21H

    JMP   _INX

;--------------------------------

EXIT_IN:

    MOV   AL, x         ;

    CMP   AL, 0

    JE    EXIT

    CMP   AL, 12

    JA    EXIT


    DEC   AL    

    LEA   DX, STRING01

    MOV   BL, CHANG

    MUL   BL

    ADD   DX, AX

    MOV   AH, 9

    INT   21H


    JMP   IN_LOOP    ;迴圈


EXIT:

    MOV   AH, 4CH    ;結束程式

    INT   21H


CODE ENDS

    END   START

;---------------------------------


執行後,顯示如下:


C:\MASM>M1


Input num (1~12, Others EXIT): 4

April

Input num (1~12, Others EXIT): 3

March

Input num (1~12, Others EXIT): 12

December

Input num (1~12, Others EXIT):


C:\MASM>


題目連結:http://zhidao.baidu.com/question/552883660


提問者評價:謝謝幫忙。

相關文章