最近由于学校课程的缘故,开始涉及汇编,当然是从8086开始,虽说已是老古董了,但关键是原理吗,下面的内容是一道作业题目,是我自己目前写的比较复杂的一个程序,当然是对我这样的菜鸟而言啦~拿出来纪念一下,说实话这段代码没什么用的,各位轻拍。。。
要求是这样的:即在终端上输入(注意输入不是已知参数)12或者12H(即打1输出1,打2需要在1的时候继续显示2,打H需要在12的后面显示H),如果打得是回车,你需要在第二行能够输出第一行数字的二进制,假设上一行顺序输入1,2,回车,那么第二行应该显示1100;如果第一行输入1,2,H,回车,那么第二行应该显示 00010010。只做显示两行的程序,即一次输入数据+回车之后程序输出并直接退出。(程序不考虑健壮性,默认所有输入是正确的)
下面直接上代码~
代码如下:
DATAS SEGMENT
DB 16 DUP(0) ;该段内存作为存储输入字符串的空间,在程序中被用来模拟栈空间,但不是真正的栈
DB 100 DUP(0) ;用来存放结果
DATAS ENDS
STACKS SEGMENT
DW 200 DUP(0)
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV SI,0 ;将SI设置为存放字符串的内存地址的首地址
CALL GETSTR
MOV AH,4CH
INT 21H
GETSTR: ;处理键盘输入的子程序
PUSH AX
GETSTRS:
MOV AH,0
INT 16H
CMP AL,20H ;判断从键盘得到的输入是否为字符
JB NOCHAR
MOV AH,0 ;字符入栈
CALL CHARSTACK
MOV AH,2 ;显示字符
MOVDX,0 ;位置为第0行、第0列
CALL CHARSTACK
JMP GETSTRS NOCHAR
NOCHAR:
CMP AH,0EH
JE BACKSPACE
CMP AH,1CH
JE ENTERS