第七章 更灵活的定位内存地址的方法
and和or命令
and指令,逻辑与运算
mov al,01100011B
and al,00111011B
执行后:al = 00100011B
通过and指令可以设相应位为0:
将al的第6位设0:and al,10111111B
将al的第7位设0:and al,01111111B
将al的第0位设0:and al,11111110B
or指令,逻辑或运算
mov al,01100011B
or al,00111011B
执行后:al=01111011B
通过or指令可以设相应位为1:
将al的第6位设0:or al,01000000B
将al的第7位设0:or al,10000000B
将al的第0位设0:or al,00000001B
大小写的转换
通过ASCII码的二进制对比:
大写 | 十六进制 | 二进制 | 小写 | 十六进制 | 二进制 |
A | 41 | 01000001 | a | 61 | 01100001 |
B | 42 | 01000010 | b | 62 | 01100010 |
C | 43 | 01000011 | c | 63 | 01100011 |
D | 44 | 01000100 | d | 64 | 01100100 |
E | 45 | 01000101 | e | 65 | 01100101 |
大写与小写相差32(十进制)二进制第5位为0是大写,为1是小写。
将datasg中的第一个字符串转化为大写,第二个字符串转换为小写。利用and or 命令进行大小写的转换:
DATAS SEGMENT DB 'BaSic' DB 'iNFOrMaTiOn' DATAS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS START: MOV AX,DATAS MOV DS,AX MOV BX,0 MOV CX,5 S: MOV AX,[BX] AND AL,11011111B MOV [BX],AL INC BX LOOP S
MOV BX,5 MOV CX,11 S1: MOV AX,[BX] OR AL,00100000B MOV [BX],AL INC BX LOOP S1 MOV AH,4CH INT 21H CODES ENDS END START
SI和DI
si和di在8086CPU中功能和bx寄存器相近。si和di不能分为两个8字节的寄存器使用。
不同的寻址方式的灵活应用
[data]用一个常数表示地址
[bx]用一个变量表示内存地址
[bx+data]或data[bx]或[bx].data用一个变量和常量表示地址,一个基础地址上用变量间接定位一个内存单元
[bx+si]用两个变量表示地址
[bx+di+data]两个变量和一个常量表示地址