文章目录
0x01. Hello, world
不解释,直接上代码
SSEG SEGMENT STACK
DB 16 DUP(?)
SSEG ENDS
DSEG SEGMENT
HELLO DB 'Hello, world!','$'
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG, DS:DSEG, SS:SSEG
START:
MOV AX, DSEG
MOV DS, AX
MOV AH, 09H ;调用09H号功能,输出显示字符串
LEA DX, HELLO
INT 21H
MOV AH, 4CH
INT 21H
CSEG ENDS
END START
0x02. 字母大小写转换
题目:
编写程序,从键盘输入一个字符串,将其中的小写字母转换成大写后,再显示出来。
SSEG SEGMENT STACK
DW 32 DUP(?)
SSEG ENDS
DSEG SEGMENT
BUF DB 50,?,50 DUP(?) ;定义字符串输入缓冲区,字符存储区最多50个字节
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG, DS:DSEG, SS:SSEG
START:
MOV AX,DSEG
MOV DS,AX
LEA DX,BUF ;设置缓冲区首地址
MOV AH,0AH ;输入一个字符串,按回车键结束输入(光标回到当前行首)
INT 21H
LEA SI,BUF+2 ;取串首地址
MOV CL,BUF+1 ;取串的实际长度
MOV CH,0 ;CX作为循环计数器
LTOU:
MOV AL,[SI] ;从串中取出一个字符
CMP AL,61H ;判断是否为小写英文字母
JB NEXT
CMP AL, 7AH
JA NEXT
SUB AL, 20H ;将小写英文字母转换为对应的大写英文字母
MOV [SI], AL ;将转换后的字符存回原处
NEXT:
INC SI
LOOP LTOU
MOV BYTE PTR [SI], '$' ;在串的尾部加上'$'字符,用于字符串显示
MOV AH, 02H ;调用02H号功能,输出一个换行符,使光标移到下一行
MOV DL, 0AH
INT 21H
MOV AH, 09H ;显示字符串
LEA DX, BUF+2 ;设置串首地址
INT 21H
MOV AH, 4CH
INT 21H
CSEG ENDS
END START
使用子程序实现
SSEG SEGMENT STACK
DW 32 DUP(?)
SSEG ENDS
DSEG SEGMENT
BUFF DB 50, ?, 50 DUP(?) ;定义缓冲区
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG, DS:DSEG, SS:SSEG
START:
MOV AX, D