DATA SEGMENT USE16
MES1 DB 'Please input:',0AH,0DH,'$'
SD DB ?
DATA ENDS
然后 MOV AH,1
INT 21H
MOV SD,AL
然后就对SD进行操作了
想问下MOV的目的操作数可以是变量(SD)吗??不是只能是寄存器和存储器吗?
应该是不可以的,改变静态变量没有意义
MOV AH,1
INT 21H 是自动转入中断子程序的入口
通过上面两条指令,会把输入或者读取的字符放到AL中,所以是MOV SD,AL
全部程序是这样的
STACK1 SEGMENT STACK
DW 256 DUP(?)
STACK1 ENDS
DATA SEGMENT USE16 ;段为16位段
MES1 DB 'Please input:',0AH,0DH,'$'
SD DB ?
DATA ENDS
CODE SEGMENT USE16
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET MES1 ;show message
MOV AH,09H
INT 21H
MOV AH,1
INT 21H
MOV SD,AL ;不懂SD
MOV SI,OFFSET SD
MOV AL,DS:[SI]
AND AL,0F0H
;取高4位
MOV CL,4
SHR AL,CL
CMP AL,0AH ;是否是A以上的数
JB C2
ADD AL,07H
C2: ADD AL,30H
MOV DL,AL ;show character
MOV AH,02H
INT 21H
MOV AL,DS:[SI]
AND AL,0FH ;取低4位
CMP AL,0AH
JB C3
ADD AL,07H
C3: ADD AL,30H
MOV DL,AL ;show character
MOV AH,02H
INT 21H
WAIT1: MOV AH,1 ;判断是否有按键按下
INT 16H
JZ WAIT1 ;无按键则跳回继续等待,有则退出
MOV AX,4C00H ;go back to dos
INT 21H
CODE ENDS
END START
sd就是在存在内存中的呀,所以mov sd,al改变了内存的值相当于mov [bx],al。