标签: x86-16

如何设置定时器

有什么办法可以将计时器设置为 60 秒 xor ah,ah

 Enter_Again:
    xor ah, ah ; I should put 60 seconds here
    int 16h    ; The user should press S before 60 seconds
    mov bl,al
            cmp al,"S"
Run Code Online (Sandbox Code Playgroud)

x86 assembly dos bios x86-16

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

引导加载程序未加载内核

我正在开发我的操作系统。

我在启动操作系统时出错。

错误是:

未找到 KERNEL.BIN!

以下是代码:

启动文件

; The Aqua_Seven_OS Operating System bootloader
; ==================================================================


    BITS 16

    jmp short bootloader_start  ; Jump past disk description section
    nop             ; Pad out before disk description


; ------------------------------------------------------------------
; Disk description table, to make it a valid floppy
; Note: some of these values are hard-coded in the source!
; Values are those used by IBM for 1.44 MB, 3.5" diskette

OEMLabel        db "MIKEBOOT"   ; Disk label
BytesPerSector      dw 512      ; Bytes per …
Run Code Online (Sandbox Code Playgroud)

x86 assembly nasm osdev x86-16

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

当我有物理地址时,如何获取段内存地址?

存储单元的物理地址以 1A32H 的形式给出。内存段的起始地址是什么。或者更准确地说,我应该用来访问它的 seg:off 地址。

有人可以逐步解释我如何解决这个问题吗?

assembly real-mode memory-segmentation x86-16

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

为什么引导加载程序只能接受 16 位程序集

自己写MBR的时候,需要告诉nasm用16bit汇编,不知道为什么2020年一定要用16bit汇编来写bootloader。

为什么我们不能用现代 x64 程序集开发引导加载程序?

assembly x86-64 bootloader x86-16

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

Core Wars 8086 安全挑战(在内存地址上安全使用加法)

我正在做一个保险箱比赛,我得到了这个保险箱:

start:
add     ds:0DEDh, ax
xor     cx, cx
loop    start
Run Code Online (Sandbox Code Playgroud)

根据我的理解,cx 在循环结束时将为 0,并在下一次迭代时更改为 FFFF。我也知道 0xCCh 是会停止程序的非法指令。我怎样才能破解这个保险箱?

**编辑:这里的目标是停止这个无限循环。循环没有停止项,我需要以某种方式让它停止使用逆向工程。例如:这是一个简单的保险箱

safe:
  mov     ax, ds:4D2h
  cmp     ax, 1000h
  jl      safe 
Run Code Online (Sandbox Code Playgroud)

这是它的关键,使用逆向工程编写:

mov bx, 1000h
mov [4D2h], bx    
l:
    jmp l
Run Code Online (Sandbox Code Playgroud)

这种保险箱钥匙的模拟是在Core Wars 8086 引擎内完成的。该规则是如下,其中既安全关键是在战争中的幸存者:

幸存者不能在固定地址上加载,因为游戏引擎每回合都会将它们加载到一个随机地址。生成的程序必须是 COM 而不是 EXE,并且只包含 8086 条指令。

每个幸存者收到一组自己的完整寄存器(寄存器),其他幸存者无法访问。此外,每个幸存者都有一个 2048 字节的“个人”堆栈,其他幸存者也无法访问。

在运行第一轮游戏之前,游戏引擎将竞技场中的所有字节初始化为值 0CCh(注意:此字节值是“不支持”的指令 - 详情如下)。然后引擎将每个幸存者加载到竞技场内存中的随机位置,即 - 完全按原样复制幸存者文件的内容。两个幸存者之间的距离,以及幸存者与竞技场边缘之间的距离,保证至少为 1024 字节。每个幸存者的代码最多有 512 个字节。

在第一轮之前,游戏引擎将(每个幸存者的)寄存器初始化为以下值:

  • BX、CX、DX、SI、DI、BP - 重置。
  • 标志 - 重置。
  • AX, IP …

assembly reverse-engineering nasm x86-16 corewars

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

x86 为什么我在移动变量时总是在 al 寄存器中获取 CD

标题说明问题。但是基本上每次我用MOV指令用一个变量来注册寄存器显示CD。但是当我使用实际数字时,寄存器会显示数字吗?

在此处输入图片说明

mov ax, @data 是否意味着将数据段内存地址移动到 ax 寄存器,并且它是否必须专门为 ax 寄存器。或者,如果我想使用 bx 寄存器中的变量,我可以做一些类似 move mov bx, @data 的事情。请回答

为什么我必须做 mov ds, ax ds 做什么为什么我很困惑有人帮助我。

x86 dos real-mode x86-16 emu8086

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

什么是处理器 Lock# 信号及其工作原理?

我正在读一本关于汇编(中级)的书,它提到了一些指令,比如xchg自动断言处理器 LOCK# 信号。在网上搜索它发现它赋予处理器任何共享内存的专有权,但没有具体细节。这让我想知道这个权利是如何运作的。

  1. 这是否意味着任何其他计算机设备(如 GPU 或其他设备)无法访问内存。实际上,其他设备可以直接与 RAM 通信,而无需先通过 CPU。
  2. 处理器如何知道它处于这种锁定状态,例如它是否保存在控制或 rflags 寄存器中,或者因为我在拥有多核 CPU 时无法看到此操作是如何工作的。
  3. 我访问的网站说锁定任何共享内存。这是否意味着在此锁定期间,整个 RAM 被锁定,或者仅锁定执行指令的内存页(或部分内存而不是全部)。

x86 assembly atomic cpu-architecture x86-16

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

为什么我的引导加载程序没有将第二个扇区加载到内存中?

我正在尝试将引导加载程序写入插入 VirtualBox VM 的虚拟软盘驱动器。这是我拥有的以下代码:

org     0x7c00              ; We are loaded by BIOS at 0x7C00

bits    16                  ; We are still in 16 bit Real Mode

Start: jmp loader
        
loader:

.Reset:
    mov     ah, 0x0                 ; reset floppy disk function
    mov     dl, 0x0                 ; drive 0 is floppy drive
    int     0x13                    ; call BIOS
    jc      .Reset                  ; If Carry Flag (CF) is set, there was an error. Try resetting again

.Load:
 
    mov     ax, 0x07e0              ; we are going to read sector to …
Run Code Online (Sandbox Code Playgroud)

assembly floppy bios bootloader x86-16

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

即使我确实为变量设置了初始值,数据段也没有被初始化

我已经编写了一个代码,它应该生成某种数字列表,但是即使我确实为它们分配了初始值,我的数据段变量也没有被初始化?

这是DS:0000我运行时的样子: ds:0000

这是我的代码,但数据段只保留垃圾值:

MODEL small
STACK 100h

DATA SEGMENT
    size1 dw 0000h
    arr dw 20 dup(0000h)
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE, DS:DATA

sidra_rekursivit proc
    mov bp, sp
    xor ax, ax
    mov ax, [bp+2]
    ; tnai azira
    cmp ax, 1
    je azira
    
    ; tempo
    mov cx, ax ; save ax
    shr ax, 1
    jnc zugi ; if zugi

    
izugi:  ; else
    mov ax, cx
    ;multiply by 3
    shl ax, 1
    add ax, cx
    ;end multiply
    ; add 1 …
Run Code Online (Sandbox Code Playgroud)

assembly initialization dos memory-segmentation x86-16

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

汇编代码不能正确使用堆栈

我正在练习汇编,但遇到了问题。这是我的代码(程序集 8086):

org 100h

.model small
.stack 100h

.data
    arr db 2, 2, 3, 4, 5
    len equ $-arr
    sum db 0 
    
.code

jmp _start

Sum1 proc
    push bp
    mov bp, sp
    
    mov bx, [bp+6]    
    xor ax, ax         
    
    mov cx, len        
    cmp cx, 0          
    je _end
    
LoopSum:
    mov di, cx         
    add al, [bx+di-1]  
    loop LoopSum

_end:
    mov [bp+4], al     
    pop bp
    ret
Sum1 endp

_start proc
    mov ax, @data
    mov ds, ax
    
    push offset arr
    push offset sum
    call Sum1 …
Run Code Online (Sandbox Code Playgroud)

assembly x86-16

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