當前位置:編程學習大全網 - 編程語言 - 用匯編語言實現從鍵盤輸入兩個2位數並進行相加,最後輸出結果

用匯編語言實現從鍵盤輸入兩個2位數並進行相加,最後輸出結果

DATAS SEGMENT ;數據段

DATA1 DB 31H,32H,38H,34H,37H ;定義DATA1為被加數

DATA2 DB 34H,35H,39H,37H,31H ;定義DATA2為加數

DATAS ENDS

STACKS SEGMENT ;堆棧段

STA DB 64 DUP(0) ;(偽指令)為STA預留64個字節的存儲空間

SP_TOP DB 0 ;定義SP_TOP單元的數值為0

STACKS ENDS

CODES SEGMENT ;代碼段

ASSUME CS:CODES,DS:DATAS,ES:DATAS,SS:STACKS

START:

MOV AX,DATAS

MOV DS,AX ; 設置數據段

MOV AX,STACKS

MOV SS,AX ; 設置堆棧段

LEA SP,SP_TOP ; 設置棧頂指針

MOV SI,OFFSET DATA1 ;把DATA1偏移量地址賦予SI

MOV BX,05 ;

CALL DISPL ; 顯示被加數

CALL CRLF ; 回車、換行

MOV SI,OFFSET DATA2 ; 把DATA2偏移量地址賦予SI

MOV BX,05 ;

CALL DISPL ; 顯示加數

CALL CRLF ; 回車、換行

MOV DI,OFFSET DATA1 ; 把DATA1偏移量地址賦予DI

CALL ADDA ;調用ADDA子程序,實行加法運算

MOV BX,05 ;

CALL DISPL ; 顯示結果

CALL CRLF ; 回車、換行

MOV AX,4C00H ;

INT 21H ;調用DOS21H功能,返回

CRLF PROC NEAR ;回車、顯示功能過程定義,屬性為NEAR

MOV DL,0DH ;把回車的ASCII碼0DH傳給DL

MOV AH,02H ;送DOS 的中斷調用功能號

INT 21H ; DOS 的中斷調用

MOV DL,0AH ; 把換行的ASCII碼0AH傳給DL

MOV AH,02H ; 送DOS 的中斷調用功能號

INT 21H ; DOS 的中斷調用

RET ; 返回

CRLF ENDP ;完成過程定義

DISPL PROC NEAR ;顯示功能過程定義,屬性為NEAR

DSL: MOV AH,02 ;送顯示功能號

MOV DL,[SI+BX-1] ;顯示字符串中壹字符

INT 21H ; DOS 的中斷調用

DEC BX ;BX減1,修改偏移量

JNZ DSL ;如果BX未減到零,跳到DSL執行指令

RET ;返回

DISPL ENDP ;完成顯示功能子程序定義

ADDA PROC NEAR ;實行加法運算子程序過程定義,屬性為NEAR

MOV DX,SI

MOV BP,DI

MOV BX,05

TRAN_HEX: SUB BYTE PTR[SI+BX-1],30H ;把ASCII碼數轉化為十六進制

SUB BYTE PTR[DI+BX-1],30H

DEC BX ; BX減1,修改偏移量

JNZ TRAN_ HEX ; 如果BX未減到零,跳到TRAN_ HEX執行指令

MOV SI,DX

MOV DI,BP

MOV CX,05 ; 包括進位,***5位

CLC ;進位標誌位CF清零 (clear carry flag)

THE_ADD: MOV AL,[SI]

MOV BL,[DI]

ADC AL,BL ; 帶進位相加,把結果存在AX

AAA ;進行AAA調整,非結合BCD碼的加法調整

MOV [SI],AL ; 結果送被加數區

INC SI ;SI加1

INC DI ;DI加1(指向下壹位)

LOOP THE_ADD ;循環

MOV SI,DX

MOV DI,BP

MOV BX,05

TRAN_ASCI: ADD BYTE PTR[SI+BX-1],30H

ADD BYTE PTR[DI+BX-1],30H

;使用PTR轉換屬性並相加,將十六進制數轉化為ASCII表示

DEC BX ; BX減1,修改偏移量

JNZ TRAN_ASCI ; 如果BX未減到零,跳到TRAN_ASCI 執行指令

RET ;返回

ADDA ENDP ;加法子程序定義完成

CODES ENDS ;代碼段完成

END START

  • 上一篇:在線svg編輯器-svg三倍圖如何轉換為壹倍圖
  • 下一篇:數據庫高手進來!!!!
  • copyright 2024編程學習大全網