当堆栈已满并且即使我向其中推入某些东西时,8086微处理器的行为如何?
我试图从小写转换为大写.我知道它很容易完成,
SUB AL, 20H
Run Code Online (Sandbox Code Playgroud)
但我得到了另一种解决方案,
AND AL, 0DFH
Run Code Online (Sandbox Code Playgroud)
请帮我理解这个.谢谢
我已经阅读了关于BIOS中断的信息,并且知道它们只能在8086实模式下访问.
我的问题:
还有其他中断吗?我已经阅读过关于DOS中断的内容,但我很困惑,如果它们在实模式下也可用,以及DOS中断列表是什么.
进入保护模式后,存储在0x00的BIOS中断表会发生什么?是替换,还是存在但只是无法访问?
我正在尝试在DOSBOX中创建一个新目录.我在Debian上,通过DOSBOX使用MASM.代码非常简单,但不起作用.
我已经用debug执行了它,它返回错误3(执行后AX = 0003h).根据这个,这个错误是因为该路径不存在.我的DOSBOX将C:驱动器安装在.asm代码所在的目录中.
我不明白为什么我会收到这个错误.如果我mkdir C:\nuevo从DOSBOX命令行运行,它将创建目录nuevo没有问题
.model small
.stack
.code
mov dx, offset filepath
mov ah, 39h
int 21h
mov ah, 4ch
int 21h
ret
filepath db "C:\nuevo", 0
end
Run Code Online (Sandbox Code Playgroud) 我想制作一个程序,该程序需要用户输入10个字符并将其保存在矢量DATA中,但出现错误
无法添加相对数量
在mov byte ptr DATA[pos], al当我尝试保存的价值。
如何解决这个错误?
.model small
.stack 100h
.data
DATA db 10 dup(?)
cont db 010h
pos db 0h
msg db 10,13,7, 'Input: ', '$'
.code
mov ax, @data
mov ds, ax
mov es, ax
mov ah, 09h
lea dx, msg
int 21h
cicle:
mov ah, 01h
int 21h
mov byte ptr DATA[pos], al ;Save ASCII char in position pos in DATA
inc pos
dec cont
jnz cicle
Run Code Online (Sandbox Code Playgroud) 是否可以在 x86_32 虚拟 8086 或实模式下使用EAX, EBX,... ?我知道,这些寄存器具有32位(和,即当然它们的非扩展部分是16个比特宽)的尺寸,但并不在类解释的,在该模式中可以使用它们,只有FS和GS是仅在保护模式下允许。
我的汇编源代码:
ideal
model tiny
segment _data byte ; TASM doesn't accept it.
ends _data
dataseg
align 1 ; Doesn't decrease the segment alignment.
lpText db "Hello, world!$"
codeseg
startupcode
lea dx,[lpText]
mov ah,9
int 21h
exitcode
end
Run Code Online (Sandbox Code Playgroud)
TASM 5.0 给了我错误段属性非法重新定义其中的行byte。
如何在理想模式下将数据段更改为字节对齐?
我需要它,因为我不希望在lpText前面生成的 .com 文件中有一个额外的 0 字节。我希望 .com 文件尽可能小。
我正在尝试编写一个实模式引导加载程序,但我目前在尝试启用 A20 线时遇到了问题。到目前为止,这是我的代码,我正在使用 NASM 进行组装:
[bits 16]
[global _start]
jmp _start
bios_print:
lodsb
test al, al
jz bios_print_done
mov ah, 0x0E
mov bh, 0
int 0x10
jmp bios_print
bios_print_done:
ret
a20_is_enabled:
push ds
push si
push es
push di
xor ax, ax
mov ds, ax
mov si, BOOT_ID_OFFS
mov ax, BOOT_ID_OFFS_PLUS_1MB_SEGM
mov es, ax
mov di, BOOT_ID_OFFS_PLUS_1MB_OFFS
cmp word [es:di], BOOT_ID
mov ax, 1
jne a20_is_enabled_done
mov ax, word [ds:si]
xor ax, ax
mov [ds:si], ax
cmp word [es:di], BOOT_ID …Run Code Online (Sandbox Code Playgroud) 我正在制作一个简单的引导程序。我想在屏幕上打印一些非拉丁文本,但无法正确打印字符“ü”。我怎样才能让我的操作系统打印字符ü?我已经搜索过它,但我找不到任何关于它的信息。
主程序
[org 0x7c00]
call clear
mov bx, SELAM
call print
call print_nl
mov bx, NABER
call print
jmp $
%include "print.asm"
SELAM:
db 'Selamun Aleyküm.', 0
NABER:
db 'Nabün?', 0
times 510 - ($-$$) db 0
dw 0xaa55
Run Code Online (Sandbox Code Playgroud)
打印.asm
print:
pusha
start:
mov al, [bx]
cmp al, 0
je done
mov ah, 0x0e
int 0x10
add bx, 1
jmp start
done:
popa
ret
print_nl:
pusha
mov ah, 0x0e
mov al, 0x0a
int 0x10
mov al, 0x0d
int …Run Code Online (Sandbox Code Playgroud)