汇编小实验(一)
实验要求:实验输入字符串并且输出
源码:
data segment
buff db 255
data ends
code segment
assume cs:code,ds:data
start:
mov ax, data
mov ds, ax
lea dx, buff
mov ah, 0ah
int 21h
lea bx,buff+1
mov al,[bx]
add al,2
mov ah,0
mov bx,ax
mov al,24h
mov [bx],ax
mov dl,0ah
mov ah,2
int 21h
lea dx,buff+2
mov ah,9
int 21h
mov ah,4ch
int 21h
code ends
end start
源码主要部分的分析:
读入字符串存在 ds:dx位置,必须要指定缓冲区
注:lea命令可以将偏移地址的数据移入寄存器中,这里我们用来实现输入字符串到buff
在缓冲区最后加入$(寄存器间址)
注:
lea bx,buff+1 : 得到存放字符串长度的地址
mov al,[bx] : 通过寄存器间址取出字符串长度,存在al中,方便等一下加2的操作
mov al,24h : 24h就是$的ascii的16进制,立即数的方式取得
显示换行(输出单个字符)因为输完字符串后的回车会被“吃掉”不会显示在屏幕上的,所以要另起一行
显示字符串(之前已经把data存入dx中了,中间ds没变,所以不用在把data,mov到ds)
程序结束
汇编小实验(二)
实验要求:实现输入字符串根据输入进行判断输出
源码:
CODE SEGMENT
ASSUME CS:CODE,DS:CODE
ORG 100H
START:JMP GET_KEY
YESSTR DB 'YES','$'
NOSTR DB 'NO','$'
GET_KEY:MOV AH,01H
INT 21H
CMP AL,'Y'
JZ YES
CMP AL,'N'
JZ NO
CMP AL,'X'
JZ DONE
JMP GET_KEY
YES: MOV AX,CS
MOV DS,AX
MOV DX,OFFSET YESSTR
MOV AH,09H
INT 21H
JMP GET_KEY
NO: MOV AX,CS
MOV DS,AX
MOV DX,OFFSET NOSTR
MOV AH,09H
INT 21H
JMP GET_KEY
DONE: MOV AH,4CH
INT 21H
CODE ENDS
END START
若通过键盘输入Y,则程序转入标号为YES的程序段显示字符串“YES”;若输入N,则程序转入标号为NO的程序段显示字符串“NO”;输入其它字符,系统无反应;输入字符X,则程序退出。
源码参考:http://blog.csdn.net/sunkun2013/article/details/12752617