汇编语言中访问内存单元的方式(windows)

本文介绍如何使用汇编语言从特定内存地址读取数据到寄存器中,并对比了不同方法的效果。通过直接访问内存偏移量与使用BX寄存器间接访问的方式,展示了在实际编程中灵活运用汇编指令的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        如果想将内存空间2000:0,2000:1,2000:2中的数据分别放入al,bl,cl中,可以通过如下方式:

mov ax,2000h
mov ds,ax
mov al,[0]
mov bl,[1]
mov cl,[2]

         如果通过debug工具下a命令在指定地址写入汇编指令,输入后用u查看:

-a
0AF3:0100 mov ax,2000
0AF3:0103 mov ds,ax
0AF3:0105 mov al,[0]
0AF3:0108 mov bl,[1]
0AF3:010C mov cl,[2]
0AF3:0110
-u 0af3:0100
0AF3:0100 B80020        MOV     AX,2000
0AF3:0103 8ED8          MOV     DS,AX
0AF3:0105 A00000        MOV     AL,[0000]
0AF3:0108 8A1E0100      MOV     BL,[0001]
0AF3:010C 8A0E0200      MOV     CL,[0002]

         看起来一切ok的样子!但是如果把这段代码写入到汇编程序文件中,然后汇编、链接,用debug查看:

assume cs:code
code segment
   mov ax,2000h
   mov ds,ax
   mov al,[0]
   mov bl,[1]
   mov cl,[2]
   mov dl,[3]
   mov ax,4c00h
   int 21h
code ends
end

         debug u查看:

-u
0B53:0000 B80020        MOV     AX,2000
0B53:0003 8ED8          MOV     DS,AX
0B53:0005 B000          MOV     AL,00
0B53:0007 B301          MOV     BL,01
0B53:0009 B102          MOV     CL,02
0B53:000B B203          MOV     DL,03
0B53:000D B8004C        MOV     AX,4C00
0B53:0010 CD21          INT     21

         oh,这里变成了数值,根本没有当做内存偏移量.....

        好吧,只能用最土的办法了: mov bx,0 mov al,[bx]。其实还有一种简洁的方法,就是常量偏移量前加短地址: mov bx,ds:[0]  :

assume cs:code
code segment
   mov ax,2000h
   mov ds,ax
   mov bx,0
   mov al,[bx]
   mov bx,1
   mov bl,ds:[bx]
   mov cl,ds:[2]
   mov dl,ds:[3]
   mov ax,4c00h
   int 21h
code ends
end

         用debug查看:

-u
0B53:0000 B80020        MOV     AX,2000
0B53:0003 8ED8          MOV     DS,AX
0B53:0005 BB0000        MOV     BX,0000
0B53:0008 8A07          MOV     AL,[BX]
0B53:000A BB0100        MOV     BX,0001
0B53:000D 8A1F          MOV     BL,[BX]
0B53:000F 8A0E0200      MOV     CL,[0002]
0B53:0013 8A160300      MOV     DL,[0003]
0B53:0017 B8004C        MOV     AX,4C00
0B53:001A CD21          INT     21
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值