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


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

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

  • 相关阅读:
    腾讯2014年实习生招聘笔试面试经历
    Unity MVC框架 StrangeIoC
    Android入门第八篇之GridView(九宫图)
    拓扑排序
    C:打印菱形(自己的方法)
    JSP中Session的使用
    继承Application实现Android数据共享
    使用Java高速实现进度条
    首次启动优美新手指引tip
    递归算法
  • 原文地址:https://www.cnblogs.com/Te-mgl/p/14100152.html
Copyright © 2020-2023  润新知