`

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

阅读更多

        如果想将内存空间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
分享到:
评论

相关推荐

    从汇编语言到Windows内核编程_Windows编程_

    3. **内存管理**:在Windows中,内存管理是内核级任务的关键部分。书中会详细解释Windows的虚拟内存机制,包括页面表、页交换、分页和分段等概念,以及如何在内核模式下分配和管理内存。 4. **进程和线程**:进程和...

    ( Windows环境下32位汇编语言程序设计(1)CHM + 源码.rar )

    3. **中断和异常处理**:汇编语言可以处理中断和异常,这是操作系统与硬件交互的重要方式。例如,通过INT指令,我们可以调用操作系统提供的服务。 4. **Windows API调用**:编写Windows程序时,汇编语言程序员经常...

    windows环境下64位汇编语言程序设计

    在"windows环境下64位汇编语言程序设计.txt"文件中,可能会详细阐述如何在64位环境下编写和调试汇编代码,包括使用MASM64、NASM或其他汇编编译器的技巧,以及Visual Studio或其它IDE的集成开发环境设置。此外,还...

    Windows环境下32位汇编语言程序设计(典藏版)配套光盘( 罗云彬)

    32位汇编语言在Windows环境下需要处理内存分段和分页机制。每个进程都有自己的虚拟地址空间,汇编程序员需要知道如何正确地访问和操作内存,包括堆、栈的使用,以及动态内存分配。 四、线程与进程 Windows操作系统...

    DOS_Windows汇编语言程序设计教程PPT

    5. **内存管理**:解释段和段寄存器的概念,以及如何在汇编中分配和访问内存。 6. **实模式与保护模式**:讨论DOS下的实模式和Windows环境下的保护模式,以及它们对汇编编程的影响。 7. **调试技巧**:介绍如何使用...

    Windows环境下32位汇编语言程序设计源代码

    - **Windows API调用**:使用汇编语言可以直接调用Windows API,如kernel32.dll中的函数,进行文件操作、窗口管理等。 - **堆栈操作**:汇编语言中,函数调用和返回涉及到堆栈的操作,如保存和恢复寄存器、传递...

    汇编语言心得.doc

    #### 八、汇编语言中的计数方式 - **计数起点**:汇编语言中的计数通常从0开始,而非生活中常用的从1开始。例如,要表示16个计数,在汇编语言中表示为0至15。 以上是对《汇编语言心得》文档中的知识点进行了详细的...

    琢石成器_Windows环境下32位汇编语言程序设计 光盘源代码

    《琢石成器_Windows环境下32位汇编语言程序设计》是一本深入探讨Windows操作系统下32位汇编语言编程的经典著作。作者罗云彬以其丰富的经验和深厚的理论基础,引领读者进入汇编语言的世界,揭示了计算机底层运作的...

    Windows环境下32位汇编语言程序设计

    5. **内存管理**:汇编语言程序需要手动管理内存,理解数据在内存中的布局,如何分配和释放内存空间,以及如何通过指针访问内存是重要的技能。 6. **过程与函数调用**:在Windows环境下,使用stdcall或cdecl调用...

    Windows环境下32位汇编语言程序设计(含光盘代码).rar

    3. **内存模型**:理解Windows下的内存管理,包括堆栈、数据段、代码段和堆的概念,以及如何通过段寄存器和偏移量访问内存地址。 4. **函数调用约定**:学习stdcall和cdecl两种常见的函数调用约定,理解参数传递的...

    Windows环境下32位汇编语言程序设计源码

    在Windows环境下进行32位汇编语言程序设计是一项技术性的任务,它涉及到计算机底层操作、内存管理和系统调用等核心概念。在这个主题中,我们主要关注以下知识点: 1. **汇编语言基础**:汇编语言是一种低级编程语言...

    Windows环境下32位汇编语言程序设计(第2版)

    通过《Windows环境下32位汇编语言程序设计(第2版)》的学习,读者将不仅掌握汇编语言的基本技能,还能了解到如何在实际的Windows系统中运用这些技能,为系统级编程和性能优化打下坚实基础。该书的PDF版本提供了详细的...

    琢石成器 windows环境下32位汇编语言程序设计_代码

    "琢石成器 windows环境下32位汇编语言程序设计_代码"这个主题涵盖了汇编语言的基础概念、Windows API调用、内存管理、指令集应用等多个知识点。 首先,32位汇编语言是针对32位处理器(如Intel x86架构)设计的,...

    windows 32汇编语言程序设计 win32汇编

    9. **性能优化**:汇编语言的优势在于其可以直接控制硬件资源,因此在需要高性能计算或减少内存访问的场景下,汇编编程能够实现优化。 10. **内存管理**:理解Windows的内存管理机制,包括分配、释放内存以及虚拟...

    Windows环境下32位汇编语言程序设计 光盘

    光盘中的"Windows 32汇编程序设计"很可能包含了书中提到的示例源代码,读者可以通过实际运行和修改这些代码,加深对汇编语言的理解。此外,光盘可能还包含了调试工具(如OllyDbg或Windbg)的使用教程,帮助读者学会...

    Windows汇编语言.pdf

    1.2 Windows汇编语言与DOS汇编语言的主要区别在于操作系统的环境和对硬件资源的访问权限。在DOS中,由于实模式的限制,需要使用分段来访问超过64KB的内存,而Windows的保护模式下,内存寻址更为直接,32位寄存器可以...

    WIN32汇编语言教程

    《WIN32汇编语言教程》是一本专为学习汇编语言设计的电子书,尤其针对Windows 32位环境下的编程。汇编语言是一种低级编程语言,它与计算机硬件紧密相连,允许程序员直接控制计算机的硬件资源,如CPU、内存和I/O设备...

    Windows环境下32位汇编语言程序设计及源码

    在Windows系统中,汇编语言程序设计通常与Microsoft的MASM(Microsoft Assembler)或NASM(Netwide Assembler)等汇编器配合使用,它们将汇编语言代码转换为机器可执行的二进制代码。 1. **Windows API调用**:在...

    Windows环境下32位汇编语言程序设计(附 源代码)

    程序控制结构,如循环、分支和函数调用,在汇编语言中也有其独特表示方式。书中会详细介绍如何实现这些结构,并提供实例帮助理解。此外,还会涉及中断处理,这对于操作系统级别的编程至关重要。 高级主题可能包括...

Global site tag (gtag.js) - Google Analytics