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

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

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

相关推荐
aaaameliaaa36 分钟前
计算斐波那契数(递归、迭代)(1,1,2,3,5.....)
c语言·开发语言·笔记·算法·排序算法
小c君tt1 小时前
linux学习笔记1
linux·笔记·学习
ysu_03142 小时前
高数期末复习笔记
笔记
疯狂打码的少年3 小时前
【操作系统】段式存储管理与段页式存储管理
笔记
半导体守望者5 小时前
MKS C系列MFC CMA10 CMA50快速紧凑型手侧与PC联网教程软件驱动USB
经验分享·笔记·功能测试·自动化·制造
小c君tt5 小时前
QT笔记记录
开发语言·笔记·qt
2601_962440846 小时前
计算机毕业设计之jsp教室管理系统
java·开发语言·笔记·分布式·算法·课程设计·推荐算法
十月的皮皮9 小时前
C语言学习笔记20260703-牛牛与后缀表达式(逆波兰表达式)
c语言·笔记·学习
咸甜适中9 小时前
rust语言学习笔记(指针十一)Cow<T>(写时克隆)
笔记·学习·rust
RainCity5 天前
Java Swing 自定义组件库分享(十二)
java·笔记·后端