汇编语言(王爽)学习记录_第七章

第七章 更灵活的定位内存地址的方法

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 ENDS

CODES 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]两个变量和一个常量表示地址

原文地址:https://www.cnblogs.com/Te-mgl/p/14100152.html