小编Myk*_*one的帖子

汇编:使用数据段寄存器(DS)

目前我正在学习x86组装以获得乐趣,我喜欢微控制器编程,所以我熟悉汇编.

目前我一直在寻找这个问题的答案的高低,但似乎无法找到它...... DS寄存器,我知道它应该指向我程序中的全局数据,但我不知道知道它是如何工作的.我正在使用NASM,在大多数简单的程序中,我看到以下内容:

[org 0x7C00]
[bits 16]  

main:
mov ax, 0x0000
mov ds, ax
mov al, [msg]  
mov ah, 0x0E  
mov bx, 0x0007  
int 0x10    
jmp $  

msg db 'X'

times 510-($-$$) db 0  
dw 0xAA55

并且它完美地工作(即使我省略了粗体代码),但是如何?CPU是否自动加载从0x0000开始的全局变量?或者我有什么内在的东西,我错过了?

x86 assembly cpu-registers segment

9
推荐指数
1
解决办法
3万
查看次数

x86_64汇编 - 在x64汇编中尝试编辑数组中的字节时的Segfault

我所遵循的教程是针对x86的,并且是使用32位汇编编写的,我正在尝试跟进,同时在此过程中学习x64汇编.在本课程中我已经进行了很好的练习,我有以下简单的程序,它只是尝试修改字符串中的单个字符; 它运行时编译好但是段错误.

section .text

global _start ; Declare global entry oint for ld
_start:

    jmp short message ; Jump to where or message is at so we can do a call to push the address onto the stack

    code:   
    xor rax, rax    ; Clean up the registers
    xor rbx, rbx
    xor rcx, rcx
    xor rdx, rdx

    ; Try to change the N to a space
    pop rsi ; Get address from stack
    mov al, 0x20 ; Load 0x20 into RAX …
Run Code Online (Sandbox Code Playgroud)

assembly x86-64 segmentation-fault

2
推荐指数
1
解决办法
457
查看次数