• 汇编语言(5)寄存器(内存访问)


    1 内存中字的存储

    CPU中,用16位寄存器来存储一个字。高八位存放高位字节,低八位存放低位字节。
    字单元概念,即存放一个字型数据(16位)的内存单元,由两个地址连续的内存单元组成。高地址内存单元中存放字型数据的高位字节,低地址内存单元中存放字型数据的低位字节。

    2 DS和[address]

    mov bx,1000H
    mov ds,bx
    mov al,[0]
    
    • 1
    • 2
    • 3

    CPU自动取ds中的数据为内存单元的段地址。
    CPU不支持直接将数据送入段寄存器的操作。

    3 字的传送

    mov bx,1000H
    mov ds,bx
    mov ax,[0]	;1000:0处的字型数据送入ax
    mov [0]cx		;cs中的16位数据送到1000:0处
    
    • 1
    • 2
    • 3
    • 4

    4 mov add sub指令

    mov 段寄存器,寄存器
    mov 寄存器,段寄存器
    mov 内存单元,段寄存器.
    mov 段寄存器,内存单元
    请添加图片描述

    5 数据段

    将123B0H~123B9的内存单元定义为数据段。现在要累加这个数据段中的前3个单元中的数据,代码如下:

    mov ax,123BH
    mov ds,ax	;将123BH送入ds中,作为数据段的段地址
    mov al,0	;用al存放累加结果
    add al,[0]		;将数据段第一个单元(偏移地址为0)中的数值加到al中
    add al,[1]		;将数据段第二个单元(偏移地址为1)中的数值加到al中
    add al,[2]		;将数据段第三个单元(偏移地址为2)中的数值加到al中
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    数据和程序在计算机中都是以二进制的形式存放的,
    在区别程序和数据时,关键是看段地址,如果段地址是ds
    段,说明该内存存放的是数据,如果段地址是cs段,说明该内存
    存放的是指令。

    6 栈

    可以将栈看做一个只有一个开口的盒子。
    栈有两个基本操作:入栈和出栈。
    PUSH(入栈)POP(出栈)。
    任何时刻SS:SP指向栈顶元素。
    关于栈越界问题,CPU只考虑当前的栈在何处、当前执行的命令是哪一条。
    当一个段中存放数据,那么就是“数据段”,存放代码,就是“代码段”,存放栈,那么就是“栈段”。

    7 用机器指令和汇编指令编程

    (1)关于D命令。
    在这里插入图片描述
    (2)在E、A、U命令中使用段寄存器。
    在这些命令中,,也可以同D命令一样,用段寄存器表示内存单元的段地址。
    (3)Debug的T命令在执行修改寄存器SS的指令时,下一条命令也紧接着被执行。

  • 相关阅读:
    MATLAB算法实战应用案例精讲-【回归算法】LightGBM算法(附Java、Python和R语言代码)
    1024程序员节,菜鸡跌跌撞撞的学习生涯
    yolov3原理记录
    祖传代码如何优化性能?
    手写本地缓存实战2—— 打造正规军,构建通用本地缓存框架
    USB摄像头驱动分析
    OpenCV实战完美实现眨眼疲劳检测!!
    【高阶数据结构】跳表
    2024年注册安全工程师报名常见问题汇总!
    如何利用OpenMesh实现不同格式的3D文件间的转换
  • 原文地址:https://blog.csdn.net/weixin_61823031/article/details/125453445