标签: x86-16

8086微处理器的堆栈溢出

当堆栈已满并且即使我向其中推入某些东西时,8086微处理器的行为如何?

stack-overflow assembly callstack microprocessors x86-16

3
推荐指数
2
解决办法
1848
查看次数

从小写转换为大写

我试图从小写转换为大写.我知道它很容易完成,

SUB AL, 20H
Run Code Online (Sandbox Code Playgroud)

但我得到了另一种解决方案,

AND AL, 0DFH
Run Code Online (Sandbox Code Playgroud)

请帮我理解这个.谢谢

assembly x86-16

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

在8086实模式下可以使用哪些中断?

我已经阅读了关于BIOS中断的信息,并且知道它们只能在8086实模式下访问.

我的问题:

  • 还有其他中断吗?我已经阅读过关于DOS中断的内容,但我很困惑,如果它们在实模式下也可用,以及DOS中断列表是什么.

  • 进入保护模式后,存储在0x00的BIOS中断表会发生什么?是替换,还是存在但只是无法访问?

  • BIOS中断如0x13或0x19,它们是如何实现的?它是在软件中还是通过处理器?

assembly operating-system interrupt real-mode x86-16

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

在创建目录时,Int 21h/ah = 39h返回AX = 3

我正在尝试在DOSBOX中创建一个新目录.我在Debian上,通过DOSBOX使用MASM.代码非常简单,但不起作用.

我已经用debug执行了它,它返回错误3(执行后AX = 0003h).根据这个,这个错误是因为该路径不存在.我的DOSBOX将C:驱动器安装在.asm代码所在的目录中.

我不明白为什么我会收到这个错误.如果我mkdir C:\nuevoDOSBOX命令行运行,它将创建目录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)

assembly masm dosbox create-directory x86-16

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

汇编语言中的"MOV AH,4CH"是什么意思?

大多数汇编代码通过以下指令终止

MOV AH, 4CH
INT 21H
Run Code Online (Sandbox Code Playgroud)

"MOV AH,4CH"是什么意思?

assembly dos instructions x86-16

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

将值保存在汇编中的var字节中

我想制作一个程序,该程序需要用户输入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)

assembly tasm x86-16

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

x86_32 虚拟 8086 和实模式是否支持扩展通用和专用寄存器?

是否可以在 x86_32 虚拟 8086 或实模式下使用EAX, EBX,... ?我知道,这些寄存器具有32位(和,即当然它们的非扩展部分是16个比特宽)的尺寸,但并不在类解释的,在该模式中可以使用它们,只有FSGS是仅在保护模式下允许。

x86 assembly real-mode cpu-registers x86-16

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

在 TASM 理想模式下设置数据段的对齐方式

我的汇编源代码:

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 文件尽可能小。

x86 assembly dos tasm x86-16

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

x86实模式调用不保存返回地址

我正在尝试编写一个实模式引导加载程序,但我目前在尝试启用 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)

x86 assembly real-mode bootloader x86-16

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

在传统 BIOS 引导加载程序中打印特殊(非拉丁)字符

我正在制作一个简单的引导程序。我想在屏幕上打印一些非拉丁文本,但无法正确打印字符“ü”。我怎样才能让我的操作系统打印字符ü?我已经搜索过它,但我找不到任何关于它的信息。

主程序

[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)

assembly nasm codepages bootloader x86-16

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