回覆列表
  • 1 # 快樂與我同行9

    ;輸入2個數

    ;累加

    ;輸出結果

    DATASSEGMENT

    ;此處輸入資料段程式碼

    MESS1DB"Input2numbers:","$";提示輸入

    MESS2DB"Sumofthenumbers:","$";提示輸出

    MESS3DB"ERROR!Inputagain!","$";提示錯誤

    SEPRDB0DH,0AH,"$";分隔符

    NEQU2;N個數

    NUMDWNDUP(?);陣列

    SUMDD?;N個數的和

    DATASENDS

    STACKSSEGMENT

    ;此處輸入堆疊段程式碼

    DW40HDUP(?)

    TOPLABELWORD

    STACKSENDS

    CODESSEGMENT

    ASSUMECS:CODES,DS:DATAS,ES:DATAS,SS:STACKS

    MAINPROCFAR

    START:

    MOVAX,DATAS

    MOVDS,AX

    MOVES,AX

    MOVAX,STACKS

    MOVSS,AX

    LEASP,TOP

    ;此處輸入程式碼段程式碼

    MOVAH,9

    LEADX,MESS1

    INT21H

    LEADX,SEPR

    INT21H

    MOVCX,LENGTHNUM

    LEADI,NUM

    CLD

    L1:

    CALLINPUT;輸入一個十進位制有符號數

    STOSW

    LOOPL1

    XORBX,BX;低位

    XORDI,DI;高位

    MOVCX,LENGTHNUM

    LEASI,NUM

    CLD

    L2:

    LODSW

    CWD;考慮溢位

    ADDBX,AX

    ADCDI,DX

    LOOPL2

    MOVWORDPTRSUM[0],BX;儲存運算結果

    MOVWORDPTRSUM[2],DI;儲存運算結果

    LEADX,SEPR

    MOVAH,9

    INT21H;輸出分隔符

    MOVAH,9

    LEADX,MESS2

    INT21H

    LEADX,SEPR

    MOVAH,9

    INT21H;輸出分隔符

    CALLOUTPUT;輸出一個-65534~65534之間的32位十進位制有符號數的結果

    MOVAH,4CH

    INT21H

    MAINENDP

    ;傳入引數:無

    ;返回值:AX輸入的一個數

    ;功能:輸入一個-32768~32767之間的十進位制有符號數,儲存在陣列對應位置上

    INPUTPROCNEAR

    PUSHSI

    PUSHDI

    MOVSI,10;進位制數

    XORDI,DI;符號位

    L6:

    XORBX,BX;最終的數字

    MOVAH,1

    INT21H

    CMPAL,"-"

    JNEL8

    INCDI

    L7:

    MOVAH,1

    INT21H

    CMPAL,"";輸入一個空格或者回車則輸入結束

    JEL10

    CMPAL,0DH

    JEL9

    L8:

    CMPAL,"0"

    JBL0

    CMPAL,"9"

    JAL0;非數字,則重新輸入

    ANDAX,0FH

    XCHGAX,BX

    MULSI

    JSL0;乘法溢位,則重新輸入

    ADDBX,AX

    JSL0;加法溢位,則重新輸入

    JMPSHORTL7

    L9:

    PUSHDX

    MOVDL,0AH

    MOVAH,2

    INT21H

    POPDX

    L10:

    CMPDI,0

    JEL11

    NEGBX;求補碼

    L11:

    MOVAX,BX

    POPDI

    POPSI

    RET

    L0:

    ;異常處理

    MOVAH,9

    LEADX,SEPR

    INT21H

    LEADX,MESS3

    INT21H

    LEADX,SEPR

    INT21H

    JMPSHORTL6

    INPUTENDP

    ;傳入引數:SI,數字儲存位置

    ;返回值:陣列

    ;功能:從儲存位置上取出一個數,以十進位制有符號數輸出

    OUTPUTPROCNEAR

    PUSHBX

    PUSHCX

    PUSHDI

    XORBX,BX;符號位,正為0,負為1

    MOVDI,10

    XORCX,CX

    MOVAX,WORDPTRSUM[0]

    MOVDX,WORDPTRSUM[2]

    TESTDX,8000

    JZL13

    INCBX

    DECAX

    SBBDX,0

    NOTAX

    NOTDX

    L13:

    DIVDI

    ADDDX,30H

    PUSHDX

    XORDX,DX

    INCCX

    CMPAX,0

    JNEL13

    MOVAH,2

    CMPBX,0

    JEL14

    MOVDL,"-"

    INT21H

    L14:

    POPDX

    INT21H

    LOOPL14

    POPDI

    POPCX

    POPBX

    RET

    OUTPUTENDP

    CODESENDS

    ENDSTART

  • 中秋節和大豐收的關聯?
  • 切的偏旁部首是什麼?