标签: x86-16

x86除法异常-返回地址

当尝试在 x86 程序集中为引导加载程序编写一些例程时,我遇到了一个错误,当发生除法错误时,程序将陷入无限循环。通过调查,我发现调用 int 0 会正常通过异常处理程序,然后继续执行程序的其余部分。为 x86 编写自己的异常处理程序,发生除法错误异常时的返回地址是指令的地址,这意味着它将永远循环执行除法。这是正常行为还是 Virtualbox/我的 cpu 特有的错误?

org 0x7c00      ;put all label addresses at offset 0x7c00

xor ax, ax      ;set up all segment registers
mov ds, ax
mov ax, 0x9000
mov ss, ax
mov sp, 0x1000
mov ax, 0xB800  ;video text memory starts at this address
mov es, ax

mov ah, 0x00
mov al, 0x02
int 0x10        ;go into 80x25 monochrome text

mov [0x0000], word DivideException
mov [0x0002], word 0x0000

xor di, di
xor bx, bx …
Run Code Online (Sandbox Code Playgroud)

x86 assembly virtualbox interrupt-handling x86-16

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

8086汇编右键单击中断

我正在Windows机器上的8086程序集中处理一个项目,我需要知道单击了哪个鼠标按钮.这有什么中断?或者我该如何找到这个?

谢谢

mouse assembly interrupt click x86-16

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

你能帮我解决一下Delphi .net的8086项目吗?

找一个程序员程序员很难帮助我

我是一个成熟的Delphi程序员,它有一个Delphi的旧版本,不是.net而且我有一个*.dll,我正在转换为.net的Delphi代码我在一个很大的学习曲线听到我知道的很少.net呢.我今天刚拿到一台装有.net的电脑!!!!!!

我通过一个解析器运行*.dll并开始在Delphi程序集中编写跳转链接,你不做任何寻址,只是引用链接.

该文件具有固定的字符串结构(我认为C++)ASCII和ANSI字符串1 /我不知道如何识别代码如何引用这些结构

2 /我不知道功能是否开始以及它们的外形

代码是免费的,任何人都可以看到它们的功能并不多.但我必须通过电子邮件发送它,因为堆栈溢出不允许我显示它.

你可以为我提供技术,或者你可以将我推荐给你认识的朋友,请给我技术人员吗?

.net delphi x86-16

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

大会8086作业 - 填补空白,误会

首先,我要道歉,英语不是我的母语,我无法想出一个更适合我的情况的头衔.

我得到了这个不完整的汇编代码:

.code
    mov [mybyte],______
    mov SP,0574h
    xor ax,ax
here:
    add AL,[mybyte]
    push AX
    dec BYTE PTR [mybyte]
    jnz here
    pop es
    nop
Run Code Online (Sandbox Code Playgroud)

问题是:_____应该写什么,这样当我们达到"nop"命令时,SP的值将是570.

我理解这个问题,我认为我也理解代码,但问题是,我看到它的方式 - SP永远不会改变.代码中唯一引用SP的位置在该行mov sp,0574h.所以无论我们在____所在的位置写什么,SP都不会改变.

我对么?或者我误解了代码?

assembly stack x86-16

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

如何判断跳跃是绝对的还是相对的?

我正在学习组装测试和"位置无关代码"的主题,我发现相对跳跃和绝对跳跃混淆之间的区别.我怎么知道它是什么样的跳跃?

我理解相对跳跃是什么(从当前线的偏移).但绝对跳跃是什么样的?它什么时候发生?

architecture assembly nasm x86-16

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

ASM - 8086 - 使用寄存器和变量

我开始掌握asm编程但我觉得我遗漏了一些关于使用寄存器来存储变量的东西.我遇到的问题是,由于内部原因,某些指令会修改其他寄存器.在某些情况下,我使用这些寄存器来存储应用程序逻辑.如何使用寄存器有什么黄金法则吗?

例如:以下代码更改dx寄存器并清除当前变量.

mov ax, 04h
mov bx, 02h
mul bx

我不想也不说我希望dx寄存器被清除掉.这里发生了什么?

assembly x86-16

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

8086的RESET程序

8086和其他处理器的复位引脚将使CS:IP指向FFFF:0000,这是内存的最低16字节.在该位置,存在到存储器空间中的其他地方的跳转指令以初始化处理器.

我的问题是,为什么指向最后一节然后故意跳到其他地方?为什么处理器制造商不将CS:IP重置为0000:0000?然后,他们可以写一些初始指令,没有任何跳跃!!

这没有意义吗?

assembly x86-16

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

如何使用16位汇编在DOS中格式化软盘?

我在我的旧书中研究了DOS的x86汇编编程,在关于中断的讨论中,我看到了13h的编程.这本书说我可以用它来格式化一个驱动器.但不幸的是,在我的书中没有提供关于如何做到这一点的更多信息.

我变得非常好奇,并试图自己使用它,但它不起作用.如何使用16位x86汇编在驱动器A:中格式化软盘?这样做很简单吗?我正在使用TASM编译和链接,并在MS-DOS中运行.

也许除了使用之外还有其他方法int 13h吗?

x86 assembly dos floppy x86-16

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

使用汇编中的getchar获取()函数

我在为gets()我的一个类做的C代码上创建一个函数时遇到了一些问题.所以我已经有一个getchar()功能,但在汇编,我从C调用它extern的东西是,目前我正在运行代码我输入一个字符串,它不显示完整的字符串而不是一些字符.

这是我的代码:C代码:

extern char getchar(void);
extern void putchar(char data);
void gets(char *str);
void puts(char *str);
void new_line();

char string[20];

int main(){
    while(1){
        gets(string);
        new_line();
        puts(string);
    }
    return 0;
}

void new_line(){
    putchar(0xD);
    putchar(0xA);
}
void gets(char *str){
    unsigned char i = 0;
    while((*str = getchar()) != 0xD){
        str[i] = getchar();
        i++;
    }
}

void puts(char *str){
    while(*str){
        putchar(*str++);
    }
}
Run Code Online (Sandbox Code Playgroud)

和我的ASM代码以防万一:

.MODEL tiny

.CODE
    public _putchar
    public _getchar

    _putchar    PROC
                push bp
                mov bp, …
Run Code Online (Sandbox Code Playgroud)

c assembly dos x86-16

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

在此代码中添加BX,2的目的是什么?

我试图理解此递归代码,但对的目的感到困惑add bx, 2。我已经在相关行上打上了标记。据我了解,我们必须用值增加指向数组的指针,但是为什么我们要加2而不是1?

    .model small
    .stack 100
    .data
     arr dw 38, 39, 90, 94, 13, 24, 53, 59, 63
     size dw 9
     result dw ?
    .code
    func proc
     push bp
     mov bp, sp
     push ax
     push bx
     push cx
     push dx
     mov cx, [bp+4]
     mov bx, [bp+6]
     mov ax, [bx]
     cmp cx, 1
     ja more
     mov [bp+6], ax
     jmp done
    more:

     **add bx, 2**

     push bx
     dec cx
     push cx
     call func
     pop dx
     cmp dx, ax
     jg …
Run Code Online (Sandbox Code Playgroud)

arrays recursion assembly x86-16

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