|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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
复制代码
|
|