小编Fif*_*nik的帖子

x86寄存器标志缩写

我正在学习汇编语言.

在Microsoft Visual Studio 2017中,我想检查寄存器标志的当前状态.

在此输入图像描述

我想知道每个寄存器标志的缩写代表什么,所以我在x86寄存器标志上查看wiki页面.

在此输入图像描述

但正如您所看到的,Visual Studio中显示的寄存器标志缩写与Wiki页面中的缩写不匹配.

对于visual studio中的注册标志,我如何找出它们代表什么?

x86 assembly masm eflags

5
推荐指数
1
解决办法
681
查看次数

定义全局描述符表有什么用?

我阅读了关于GDT(全局描述符表)的教程,该教程将GDT定义为"为内存的某些部分定义基本访问权限的那个".这意味着GDT用于记忆保护.

它是否执行除上述以外的任何其他任务?

是否必须在操作系统中实施GDT?

简而言之,如果有人能够以易于理解的方式详细阐述GDT,那将会更好.

谢谢

x86 assembly operating-system kernel gdt

4
推荐指数
1
解决办法
2743
查看次数

emu8086无法识别我的标签

我尝试编写一个汇编代码,确定28是否是一个完整的数字.但我有一个问题.当我运行代码时,emu8086无法识别我的标签.
例如,在此代码中:

mov dl,1ch
mov bl,00h ;sum
mov cl,1ch ;counter
dec cl

HERE : mov ax,00h
mov al,dl
div cl ;ax/dl ah=remainder
cmp ah,00h
je SUM ; if ah=0 jump the label SUM 
loop HERE

mov dh,00h
cmp dl,bl
je PERFECT
hlt

SUM :
add bl,cl
jmp HERE   

PERFECT :
mov dh,01
hlt
Run Code Online (Sandbox Code Playgroud)

loop HERE指令运行时,emu8086运行mov dl,1ch我的代码的第一条指令().我能做什么?问题是什么?

提前致谢...

assembly microprocessors emu8086

4
推荐指数
1
解决办法
490
查看次数

emu8086抱怨DB中有一个长字符串的"Unterminated string"

我是8086程序集编程的新手,我有一个问题.

我有一个大小约1400个字符的字符串.当我试图定义它时:

.data
mystring DB '(string with 1400 characters)'
Run Code Online (Sandbox Code Playgroud)

我收到了一个错误

"未终止的字符串".

我正在使用emu8086模拟器.我认为我的字符串不适合DB.有没有办法在字节中保留大字符串?

assembly x86-16 emu8086

4
推荐指数
1
解决办法
240
查看次数

装配文本颜色

我正在汇编中创建一个 iso 文件,并且想为文本添加颜色(在本例中为:红色)。
有谁知道该怎么做?

[BITS 16]
[ORG 0x7C00]

jmp main

main:
    mov si, string ; si=string
    call printstr
    jmp $

printstr:
    lodsb ; al=&si[0]
    cmp al,0 ;FLAGS = 0
    jnz print
    ret

print:
    mov  ah,0Eh
    int  10h
    jmp printstr

string db "HELLO WORLD!",13,10,0

times 510 - ($-$$) db 0
dw 0xAA55
Run Code Online (Sandbox Code Playgroud)

assembly colors bootloader x86-16

4
推荐指数
1
解决办法
4691
查看次数

可以修改C中的字符串文字吗?

最近我有一个问题,我知道一个指向常量数组的指针(在下面的代码中初始化)位于该.rodata区域中,并且该区域仅可读。但是,我在模式C11中看到,此内存地址行为的写入将是不确定的。我知道Borland的Turbo-C编译器可以在指针指向的地方写,这是因为处理器在当时的某些系统上以实模式运行,例如MS-DOS?还是与处理器的操作模式无关?使用保护模式下的处理器,是否还有其他编译器可以写入指针并且不会导致任何内存破坏失败?

#include <stdio.h>

int main(void) {
    char *st = "aaa";
    *st = 'b'; 
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在此代码与MS-DOS中的Turbo-C一起编译时,您将能够写入内存

c gcc x86-16

4
推荐指数
2
解决办法
208
查看次数

什么阻止我使用ASM跳转到任何绝对地址?

什么阻止我执行jmp @9274592即使它超出我的程序的限制?我不是直接写入CPU吗?在我假设的操作系统中,究竟是什么阻止命令被执行?

assembly operating-system

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

Multboot 标头中的校验和的用途是什么?

\xe2\x80\x98checksum\xe2\x80\x99 的用途是什么?

\n\n

字段 \xe2\x80\x98checksum\xe2\x80\x99 是一个 32 位无符号值,当添加到其他魔术字段(即 \xe2\x80\x98magic\xe2\x80\x99 和 \xe2\x80\ x98flags\xe2\x80\x99),必须有一个 32 位无符号和为零。

\n\n
dd 0x100000000 - (0xe85250d6 + 0 + (header_end - header_start))\n
Run Code Online (Sandbox Code Playgroud)\n

assembly kernel multiboot

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

汇编错误A2075:跳转目标太远:在LOOP指令上跳过25个字节

我收到此错误:

loop    AdderLoop
Run Code Online (Sandbox Code Playgroud)

错误A2075:跳转目标太远:25个字节

这是一个加法器程序.

我还在学习pop,push所以也许我没有做正确的事,但似乎我的变量ARRAY_SIZE没有正确存储?

我在程序开始时按下存储ARRAY_SIZE的寄存器,并在程序结束时将其弹出.

.386      ;identifies minimum CPU for this program

.MODEL flat,stdcall    ;flat - protected mode program
                       ;stdcall - enables calling of MS_windows programs

;allocate memory for stack
;(default stack size for 32 bit implementation is 1MB without .STACK directive 
;  - default works for most situations)

.STACK 4096            ;allocate 4096 bytes (1000h) for stack

;*******************MACROS********************************

;mPrtStr
;usage: mPrtStr nameOfString
;ie to display a 0 terminated string named message say:
;mPrtStr message …
Run Code Online (Sandbox Code Playgroud)

x86 assembly loops

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

寄存器AL和AX溢出到哪里?

请告诉我以下汇编(伪)代码的结果是什么?
我们已经设置寄存器的所有位EAX为0,这样反过来我们也有AHALAX为0。但是,当我减去最低位AL,我们将采取补和补充,给我们一堆1秒,随后一0。

XOR eax, eax
SUB al 0x01
Run Code Online (Sandbox Code Playgroud)

因此,总而言之,我的问题是在执行上述代码时,将AL充满1,或者也将延续到AXEAX

x86 assembly integer-overflow cpu-registers ctf

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