title: 汇编笔记_第七章
date: 2018-12-26 21:47:17
tags:
笔记
categories:
汇编语言
更灵活的定位内存地址的方法 and和or指令and指令:逻辑与指令,按位进行与运算;
通过该指令可以将操作对象的相应为设为0,其他位不变,例如将al的第6为设为0的指令是:and al,10111111B
or指令,逻辑或指令,按位进行或运算;
同样,或运算可以将操作对象的相应设为1,其他位不变:or al,01000000B;
字符大小写转换汇编程序中,用'...'来指明数据是以字符的形式给出的,编译器将把他们转化成对应的ASCII码;
对比大写字母和小写字母的二进制,小写字母的ascii码值比大学字母的大 20H,而且除第5位以外其他位都一样,大写字母的第五位为0,小写字母的为1;
大写 二进制 小写 二进制A 01000001 a 01100001
B 01000010 b 01100010
C 01000011 c 01100011
D 01000100 d 01100100
所以可以通过与或操作来实现:
... add al,11011111B;变大写字母 ... or al,00100000B;变小写字母 ... [bx + idata] mov al,[bx + 5] mov al,[5 + bx] mov al,5[bx] mov al,[bx + 0] mov al,[0 + bx] mov al,0[bx] 都是等价的 SI和DISI和DI是8086CPU中和bx功能相近的寄存器;
他们不能分成两个8位寄存器使用;
可以使用[bx + si]、[bx + di]指明内存单元,指令mov ax,[bx + si]可以写成mov ax,[bx][si];
mov ax[bx+si+idata] 可以写成: mov ax,[bx+200+si] mov ax,[200+bx+si] mov ax,200[bx][si] mov ax,[bx].200[si] mov ax,[bx][si].200 不同的寻址方式的灵活运用一般来说,在需要暂存数据的时候,需要栈来保存;
例如:
//将每一行的字母都变为大写 assume cs:codesg,ds:datasg,ss:stacksg datasg segment db 'ibm ' db 'dec ' db 'dos ' db 'vax ' datasg ends stacksg segment dw 0,0,0,0,0,0,0,0 stacksg ends cosesg segment start: mov ax,stacksg mov ss,ax mov ds,ax mov bx,0 mov cx,4 s0: push cx //保存外层循环的cx mov si,0 mob cx,3 //设置内层循环的cx s: mov al,[bx+si] and al,11011111b mov [bx+si],al inc si loop s add bx,16 pop cx //恢复外层循环cx的值 loop s0 mov 4c00h int 21h codesg ends end starthttps://www.cnblogs.com/31415926535x/p/10187020.html
(end)