æ±ç¼æ¯å¤æçï¼å¯ä»¥ä¸è½½MASMæè
Radasmç¼è¯å¦ä¸ä»£ç ï¼å¨linuxå¹³å° å¯ä»¥ç´æ¥ç¨gccèªå¸¦çasæ±ç¼å¨è¿è¡ç¼è¯ã
DATA SEGMENT
DATA1 DB ?
DATA2 DB 2 DUP(?)
DATA20 DB 2 DUP(?)
DATA3 DB 'Input Error, Please Enter Again!','$'
DATA ENDS
STACK SEGMENT
DB 5 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA,SS:STACK
START:MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
MOV BX,0
INPUT:MOV AH,01H
INT 21H
CMP AL,51Hï¼å¤æè¾å
¥çå符æ¯å¦ä¸ºQ
JE EXIT
ï¼å¦ææ¯Qå°±éåº
CMP AL,71Hï¼å¤æè¾å
¥çå符æ¯å¦ä¸ºq
JE EXIT
ï¼å¦ææ¯Qå°±éåº
PUSH AX
ï¼æä»é®çè¾å
¥çå符çASCIIåå°å æ 段
SUB AL,30H ï¼å¤ææ¯å¦ä¸ºæ°å
CMP AL,00H
JL INDI ï¼å¦æä¸æ¯å°±æ示é误
CMP AL,09H ï¼
MOV BL,AL ï¼
JLE OUTPUT2ï¼å¦ææ¯æ°åå°±è¾åº
POP AX ï¼æALçå¼ååºæ¥
PUSH AX ï¼
MOV BL,AL
SUB AL,41Hï¼å¤ææ¯å¦ä¸ºå¤§ååæ¯Aå°F
CMP AL,00H
JL INDI
ï¼å¦æä¸æ¯å°±æ示é误
CMP AL,06H
JL CHANGE
POP AX
PUSH AX
MOV BL,AL
SUB AL,61Hï¼å¤ææ¯å¦ä¸ºå°ååæ¯aå°f
CMP AL,00H
JL INDI ï¼å¦æä¸æ¯å°±æ示é误
CMP AL,06H
JL CHANGE
POP AX
JMP INDI
CHANGE:MOV SI,0
MOV DI,0
MOV CL,4
MOV AL,BL
AND AL,11011111Bï¼ç»ä¸æ¢ä¸ºå¤§ååæ¯å转æ¢ï¼å¦ææ¯å¤§ååæ¯å°±ä¸å
SUB AL,31H
MOV BL,AL
AND AL,0FH ï¼
ä¸è¿ç®ï¼åä½ä½
MOV [DATA2+SI],AL ï¼æ个ä½æ°åå°DATA2ä¸
MOV AL,BL
SAR AL,CL ï¼ç®æ¯å³ç§»ï¼åé«ä½
MOV[DATA20+DI],ALï¼æåä½æ°åå°DATA20ä¸
OUTPUT1: MOV DL,48Hï¼è¾åº
åå
è¿å¶ç¬¦å·H
MOV AH,02H
INT 21H
MOV DL,3DH ï¼è¾åºçå·â=â
MOV AH,02H
INT 21H
MOV DL,[DATA20+DI]ï¼è¾åºåä½æ°
ADD DL,30H
MOV AH,02H
INT 21H
MOV DL,[DATA2+SI]ï¼è¾åºä¸ªä½æ°
ADD DL,30H
MOV AH,02H
INT 21H
MOV DL,20H
MOV AH,02H
INT 21H
JMP INPUTï¼è·³å°è¾å
¥æ°å
OUTPUT2: MOV DL,48H ï¼è¾åºæ°å
MOV AH,02H
INT 21H
MOV DL,3DH
MOV AH,02H
INT 21H
MOV DL,BL
ADD DL,30H
MOV AH,02H
INT 21H
MOV DL,20H
MOV AH,02H
INT 21H
JMP INPUT
INDI:MOV DL,20H ï¼æ示åç¨åº
MOV AH,02H
INT 21H
MOV DX,OFFSET DATA3 ï¼æ¾ç¤ºæ示信æ¯
MOV AH,09H
INT 21H
JMP INPUT
EXIT:MOV AH,4CH
INT 21H
CODE ENDS
END START