汇编语言传递数据和地址的误区

最近学习汇编语言的时候,发现了一个盲点:mov 寄存器,标号,它是传送数据还是地址?

我一直都以为16位为传数据,32位为传地址,这里拿16位和32位举例

16位:

复制代码
assume cs:code ,ds:data
data segment
    db 'hpspkhpspk'
    db '..........'
data ends

code segment
start:  mov ax,data
    .....
        

code ends
end start

32位:

复制代码
section .bss
    buffer resb 64
    
section .data
    prompt db 'your name:'
    ;...
    
section .text
    global _start

_start: ;...
    mov ecx,prompt

    ;...

两个mov的寄存器结果:

复制代码
ax:076A  ecx:0x804a000

这里其实已经出答案了,但当时我先学的16位汇编,没想过这个问题,直到最近学32位汇编才发现(大家引以为戒)

++两个都是传地址++,只是16位的data太迷惑人了,搞得我以为mov ax,data是传数据

data和prompt都是标号,本质是内存地址的别名

再写个注释:

复制代码
mov ax,data ;ax=data段地址(16位)
mov ecx,prompt ;ecx=prompt的线性地址(32位)

如果是mov 寄存器,标号才是传数据比如:

复制代码
mov al,[data]   ;读取一个字节或   mov ecx,[prompt]   ;读取四个字

原文链接:汇编语言传递数据和地址的误区

相关推荐
一隅论数智1 天前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
深圳老胡1 天前
STM32F407 控制 L6470 步进电机驱动 —— 控制过程简介
笔记·stm32·单片机·嵌入式硬件·代码规范
Because_of_Her12 天前
并查集-听课笔记
笔记·算法·并查集
彧azz2 天前
Linux 环境下 Redis 学习总结:数据类型、持久化、锁、事务、主从与缓存问题
linux·redis·笔记·学习·面试
陈卫军老师2 天前
陈卫军:把口味写在一张纸上,店才稳得住
经验分享·笔记·流量运营
`流年づ2 天前
人工智能学习笔记 - 补充
人工智能·笔记·深度学习·学习
qeen872 天前
【Linux】操作系统之进程介绍(二)
linux·笔记·学习·进程
从零开始的嵌入式之旅2 天前
day47
arm开发·经验分享·笔记·嵌入式硬件
陈年老古董2 天前
MediaPipe 姿态检测与脸部关键点检测
笔记·python·opencv·学习·dlib
彧azz2 天前
操作系统时间管理与系统核心板块学习总结
c语言·笔记·学习·系统架构