马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
感觉代码有点混乱,跳转比较多,还好我都做了注释了,方便大家assume cs:code
data segment
db "Beginner's All-purpose Symbolic Instrution Code.",0
data ends
code segment
start: mov ax,data
mov ds,ax
mov si,0
mov bx,0
mov cx,0
call letter
mov ax,4c00h
int 21h
letter: mov bl,[si] ; 把si的内容给bl
mov cl,[si] ; 把si的内容给cl,判断cx是不是为0
cmp bl,30h ; 最近新学的判断指令,主要判断bl是不是大与30,因为标点符号的ASCII码都小于30H
jna s ; CF为1就跳转到S去
and bx,11011111b ; 把字母转换成大写的关键
mov [si],bl ; 把转换成大写的字母,再放回原来的内存中
inc si
loop letter ; 这是循环,所以才有了上面的mov cl,[si],不然一开始cx=0就不会循环了
ok: ret ; 这是和call配套的,就是转移到call的下面的代码去执行
s: mov [si],bl ; CF为1就跳过来执行,把标点符号直接原样复制到[si]里面
inc si
jcxz ok
jmp short letter
code ends
end start
|