有什么办法可以将计时器设置为 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) 我正在开发我的操作系统。
我在启动操作系统时出错。
错误是:
未找到 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) 存储单元的物理地址以 1A32H 的形式给出。内存段的起始地址是什么。或者更准确地说,我应该用来访问它的 seg:off 地址。
有人可以逐步解释我如何解决这个问题吗?
自己写MBR的时候,需要告诉nasm用16bit汇编,不知道为什么2020年一定要用16bit汇编来写bootloader。
为什么我们不能用现代 x64 程序集开发引导加载程序?
我正在做一个保险箱比赛,我得到了这个保险箱:
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 …
标题说明问题。但是基本上每次我用MOV指令用一个变量来注册寄存器显示CD。但是当我使用实际数字时,寄存器会显示数字吗?
mov ax, @data 是否意味着将数据段内存地址移动到 ax 寄存器,并且它是否必须专门为 ax 寄存器。或者,如果我想使用 bx 寄存器中的变量,我可以做一些类似 move mov bx, @data 的事情。请回答
为什么我必须做 mov ds, ax ds 做什么为什么我很困惑有人帮助我。
我正在读一本关于汇编(中级)的书,它提到了一些指令,比如xchg自动断言处理器 LOCK# 信号。在网上搜索它发现它赋予处理器任何共享内存的专有权,但没有具体细节。这让我想知道这个权利是如何运作的。
我正在尝试将引导加载程序写入插入 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) 我已经编写了一个代码,它应该生成某种数字列表,但是即使我确实为它们分配了初始值,我的数据段变量也没有被初始化?
这是我的代码,但数据段只保留垃圾值:
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) 我正在练习汇编,但遇到了问题。这是我的代码(程序集 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)