一个例题:小写英文字符串变大写并输出
知识点:
- 中断处理
- 小写转大写
- rep movsb
- 字符输出 int 10h
源码分析
assume cs:code
data segment
db 'conversation',0
data ends
code segment
start: mov ax,cs
mov ds,ax
mov si,offset capital//cs:si 为capital所在代码开始
mov ax,0
mov es,ax
mov di,200h //es:di 为200h+0开始
mov cx,offset capitalend-offset capital ;两地址相减作为复制长度
cld ;按地址又低到高读取
rep movsb ;DS:SI这段地址的N个字节复制到ES:DI指向的地址
;以上一段代码作用为从capital段到capitalend复制code到200h+0的位置,共11h行
mov ax,0
mov es,ax
mov word ptr es:[7ch*4],200h
mov word ptr es:[7ch*4+2],0//这两行作用为指定int 7ch开始地址为200h
mov ax,data
mov ds,ax
mov si,0
int 7ch
;调用复制的capital代码
mov ax,data
mov es,ax;数据起地址data
mov bp,0;偏移量0
mov al,0;光标跟随输出位置
mov bl,9;蓝色高亮
mov bh,0;页数,0为当前页
mov dh,0;y坐标
mov dl,0;x坐标
mov cx,12;12个大小的长度
mov ah,13h;输出字符
;上方为设置参数
int 10h
;输出
mov ax,4c00h
int 21h
;退出
capital: push cx
push si
change: mov cx,[si]
mov ch,0
jcxz ok
and byte ptr [si],11011111b;a='1100001' A='1000001'所以与一下就是大写
inc si
jmp short change
ok: pop si
pop cx
iret
capitalend: nop
code ends
end start
参考资料
http://blog.csdn.net/u011391093/article/details/50895744 题目
http://www.cnblogs.com/BoyXiao/archive/2010/11/20/1882716.html 寄存器
http://www.cnblogs.com/hustlijian/archive/2011/06/04/2072656.html debug调试器 命令
https://zhidao.baidu.com/question/130424698.html rep movsb详细解释
https://zhidao.baidu.com/question/270682681.html 字节问题
http://www.cnblogs.com/magic-cube/archive/2011/10/19/2217676.html 汇编 int 10h功能