21H的源碼
❶ DOS加法的編程代碼
DATA SEGMENT ;數據段
MSG1 DB 'PLEASE INPUT A',0DH,0AH,'$'
MSG2 DB 0DH,0AH,'PLEASE INPUT B',0DH,0AH,'$'
MSG3 DB 0DH,0AH,'RESULT IS',0DH,0AH,'$'
MSG4 DB 0DH,0AH,'ERROR',0DH,0AH,'$'
DATA ENDS
EXTRA SEGMENT;附加段
EXTRA ENDS
STACK SEGMENT;堆棧段
STAPN DB 100 DUP (00H) ;定義100位元組空間
TOP EQU LENGTH STAPN
STACK ENDS
CODE SEGMENT
MAIN PROC FAR ;過程定義語句
ASSUME CS:CODE,DS:DATA,ES:EXTRA,SS:STACK
START:
MOV AX,DATA
MOV DS,AX
MOV AX,EXTRA
MOV ES,AX
MOV AX,STACK
MOV SS,AX
;寫入代碼
LEA DX,MSG1 ;將MSG1首地址值賦給DX
MOV AH,09H ;調用09H指令,顯示字元串,DS:DX=串指令
INT 21H
MOV AH,01H
INT 21H ;讀入一個數,放在AL中,讀進來的數為ASCII碼
SUB AL,30H ;轉為原來的數,因為30H為0的ASCLL碼
MOV BL,AL ;由於後期AL需要再度被賦值,固將操作數A存放在BL中
MOV DX,OFFSET MSG2 ;將首地址存放在DX中
MOV AH,09H
INT 21H
MOV AH,01H
INT 21H
SUB AL,30H ;轉為原來的數,例如34H,原來的數實際上為我們由鍵盤輸入的4
ADD AL,BL ;兩數相加,根據條件(8)假如數字只和大於10則顯示錯誤
CMP AL,0AH ;假如大於等於10則錯誤
JAE ERROR ;相加之和大於等於10則跳轉到ERROR,否則順序執行
MOV BL,AL
MOV DX,OFFSET MSG3
MOV AH,09H
INT 21H
ADD BL,30H ;將BL眾數據轉換為ASCII碼,因為輸出結果是個位數且只輸出一個字元
MOV DL,BL ;將待顯示字元的ASCLL碼放入DL中
MOV AH,02H
INT 21H
;退出DOS系統
MOV AH,4CH
INT 21H
RET
ERROR:LEA DX,MSG4
MOV AH,09H
INT 21H
RET
MAIN ENDP;MAIN過程結束
CODE ENDS ;代碼段結束
END START ;整個源代碼結束
❷ 幫我看看我的源代碼錯在哪裡
語法都有錯誤
DATA SEGMENT
ERADE DB 50 DUP(?)
RANK DB 100 DUP(?)
X1 DB 'please input the numbers of student:$'
X2 DB 'please input the schoolnumbers of student one by one:$'
HC DB 0DH,0AH,'$';0DH回車,0AH換行,$字元串結束
DATA ENDS
STACK SEGMENT PARA STACK'STACK'
DB 50 DUP(?)
STACK ENDS
;換行宏定義
SHOW MACRO TT
LEA DX,TT
MOV AH,09H
INT 21H
ENDM
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
INPUT PROC FAR
MOV DX,OFFSET X1
MOV AH,09H
INT 21H
SHOW HC
MOV AH,01H
INT 21H
mov ah, 0
sub ax, 30h
MOV CX,ax
SHOW HC
MOV DX,OFFSET X2
MOV AH,09H
INT 21H
SHOW HC
MOV SI,OFFSET RANK
CON: MOV AH,01H
INT 21H
MOV [SI],AL
INC SI
MOV AH,01H
INT 21H
MOV [SI],AL
INC SI
DEC CX
JZ AGN1
MOV AH,01H
INT 21H
CMP AL,20H
JZ CON
AGN1:
MOV DL,1H
MOV AH,02H
INT 21h
RET
INPUT ENDP
MAIN:
MOV AX,DATA
MOV DS,AX
CALL INPUT
MOV AH,4cH
INT 21H
CODE ENDS
END MAIN