zoukankan      html  css  js  c++  java
  • 更灵活的定位内存地址的方法

    与其说这一章是在讲如何在汇编语法上更方便的定位内存地址,不如说是如何在底层中抽象出一种数据结构来。

    and和or指令

    and指令:逻辑与指令,按位进行计算,全一得一
    or指令:逻辑或指令,按位进行计算,逢一得一

    以字符形式给出数据

    在汇编程序中,以'....'指明数据是以字符的形式给出的,编译器将把他们转换位相应的ASCII码。

    ASCII码大小写转换的问题

    同一个字母的大写写小写字符对应的ASCII码是不同的,他们之间相差20H。使用二进制表示也就是相差100000B。
    UTOOLS1560927449284.png

    所以很明显的看出来,大写字母和小写字母之间的区别就是第6位(位数从1开始计算)是否为1。

    [bx+idata]

    mov ax, [bx+200]
    数学化的描述为:(ax)=((ds)*16+(bx)+200)
    该指令还可以写成如下形式:
    mov ax, [200+bx]
    mov ax, 200[bx]
    mov ax, [bx].200

    si和di

    在8086中和bx功能相近的寄存器,bx是默认的数据段偏移地址寄存器。
    si和di都可以作为数据段偏移地址寄存器来使用,与bx的用法相同。但si和di不能够分成两个8位寄存器。

    [bx+si]和[bx+di]

    之前是一个常量加上一个变量(bx),现在是两个常量,可以看出来,偏移地址的指定更加的灵活了。
    指令mov ax, [bx+si]
    数学化的描述为:(ax)=((ds)*16+(bx)+(si))
    也可以是以下格式:
    mov ax, [bx][si]

    [bx+si+idata]

    不必多说,应该很容易明白。

    不同的寻址方式的灵活应用

    1. [idata]用一个常量来表示地址,用于直接定位一个内存单元
    2. [bx]用一个变量来表示内存地址,用于间接定位一个内存单元
    3. [bx+idata]用一个变量和常量表示地址,在一个起始地址的基础上偏移
    4. [bx+si]用两个变量表示地址
    5. [bx+si+idata]用两个变量和一个常量表示地址

    问:如何实现一个嵌套的循环
    答:使用另外一个寄存器或者使用内存展示存储cx的值,在遇到对应的循环语句时将其取出。





  • 相关阅读:
    CSS盒子模型
    getContextPath、getServletPath、getRequestURI、request.getRealPath的区别
    MYSQL中的CASE WHEN END AS
    单点登录的精华总结
    git&github
    June 21st 2017 Week 25th Wednesday
    June 20th 2017 Week 25th Tuesday
    June 19th 2017 Week 25th Monday
    June 18th 2017 Week 25th Sunday
    June 17th 2017 Week 24th Saturday
  • 原文地址:https://www.cnblogs.com/freesfu/p/11051585.html
Copyright © 2011-2022 走看看