|
发表于 2011-12-25 22:52:27
|
显示全部楼层
本帖最后由 nbceshi 于 2011-12-25 22:54 编辑
- assume cs:code
- code segment
- start: mov ax, 2000h
- mov es, ax ;设置目标段地址
- mov bx, 97 ;赋予bx的初始值a的ASCII码
- mov cx, 26 ;共有26个字母
- s: mov di, bx ;将偏移地址同步
- mov es:[di-97], bl ;定位偏移地址,将字母写入目标地址
- inc bx ;自增字母和偏移地址
- loop s
-
- mov ax, 3000h
- mov ss, ax ;设置栈段地址
- mov sp, 26 ;栈指针
- mov di, 0 ;重新定位字母初始偏移地址
- mov cx, 13 ;因按字操作,故设置13次循环
- s1: mov ah, es:[di] ;mov ax, es:[di] ;取2个字母到ax
- inc di ;xor ah, al ;交换字母位置
- mov al, es:[di] ;xor al, ah
- inc di ;xor ah, al
- and ax, 0dfdfh ;and ax, 0dfdfh ;转换为大写字母
- push ax ;push ax ;入栈即存放指定位置
- loop s1 ;add di, 2 ;准备取下2个字母
- ;loop s1
- mov ax, 4000h ;取目标段地址
- mov ds, ax
- mov si, 0 ;将目标偏移地址置0
- mov di, 0 ;将小写字母的初始偏移地址置0
- mov cx, 13
- s2: pop ax ;出栈2个字母到ax
- add ax, es:[di] ;加上小写字母的值
- mov ds:[si], ax ;将计算后的值放入目标地址
- add di, 2
- add si, 2
- loop s2
-
- mov ax, 4c00h
- int 21h
- code ends
- end start
复制代码 |
|