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

最近学习汇编语言的时候,发现了一个盲点: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 小时前
【51单片机2个外部中断显示中断历时,初始化8左移3位共阳数码管】2024-6-6
c++·经验分享·笔记·算法·51单片机
iCxhust3 小时前
MTK8088单板机制作(一)时钟电路
汇编·单片机·嵌入式硬件·微机原理·8088单板机
tq10863 小时前
OperationSequence DSL 2.1 语法规范
笔记
智者知已应修善业4 小时前
【用74LS151的实现(16序列信号发生器)】2024-6-1
驱动开发·经验分享·笔记·硬件架构·硬件工程
是上好佳佳佳呀5 小时前
【LangChain|Day04】RAG 全流程基础笔记:Document 、 Loader 和 Splitter
笔记·langchain·rag
俊男无期5 小时前
【无标题】
笔记·其他
iCxhust5 小时前
8086 汇编位测试使用方法
汇编·单片机·嵌入式硬件·微机原理·8088单板机
m0_719084115 小时前
es我的笔记
大数据·笔记·elasticsearch
iCxhust5 小时前
用汇编在8088单板机上创建一个进程
汇编·微机原理