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

最近学习汇编语言的时候,发现了一个盲点: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]   ;读取四个字

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

相关推荐
LuminousCPP1 小时前
数据结构-二叉树(六):BFS层序遍历与完全二叉树判断|复用链式队列 + (N_0=N_2+1) 性质证明
c语言·数据结构·笔记·算法·二叉树·宽度优先
一条破秋裤3 小时前
STM32 学习笔记:PWM 驱动 LED 呼吸灯与舵机代码
笔记·stm32·学习
Freak嵌入式4 小时前
Pico PIO 汇编语法深度详解:标识符、指令、伪指令全解析
汇编·stm32·单片机·嵌入式硬件·fpga开发·硬件架构
kyrie_sakura5 小时前
python学习笔记11 -- 进程和线程
笔记·python·学习
自小吃多5 小时前
PCB Editor软件差分对添加与设置笔记
笔记·嵌入式硬件
Capricorn19886 小时前
防编造架构实战:对比 Gemini Notebook 解析知芽 Notebook Skill 的工程实现
人工智能·笔记·elasticsearch·架构·知识图谱·论文笔记
Shell运维手记7 小时前
Linux mdadm 软 RAID + LVM 完整综合笔记
linux·运维·笔记·5g
疯狂打码的少年7 小时前
【数据库技术】SQL数据查询(SELECT基本语法)
数据库·笔记·sql·oracle
Made in Haven7127 小时前
HTML课程笔记补2
前端·笔记·html
夕除8 小时前
redis--010
笔记·分布式·学习