标签: x86-16

8086汇编,关于PTR运营商

这可能是简单而愚蠢的,但无论如何我会问它,因为我似乎无法弄明白.

一个简单的代码片段:

 assume cs:code, ds:data
 data segment
    b dd 256
 data ends

 code segment
 start:
        mov ax,data
        mov ds,ax
        mov ax,word ptr b     -> the result of this operation will be ax:= 256 (100h)

        mov bx,word ptr b+1   -> while this is going to be bx:= 1
Run Code Online (Sandbox Code Playgroud)

我想它与地址有关,它被一个字节或其他东西移动但我不完全确定,我真的需要理解.

提前致谢 !

x86 assembly x86-16

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

BIOS int 10h在QEMU上打印垃圾

编写在QEMU中作为引导加载程序运行的x86实模式汇编程序时遇到问题.我正在尝试通过BIOS中断0x10打印文本.我的代码是:

print:
    pusha
.loop:
    mov AL, [SI]
    cmp AL, 0
    je .end
    call printChar
    inc SI
    jmp .loop
.end:
    popa
    ret

printChar:
    pusha
    mov AH, 0x0E
    mov BH, 0
    mov BL, 0x0F
    int 0x10
    popa
    ret
Run Code Online (Sandbox Code Playgroud)

[ORG 0x7c00]用作原点.我测试了printChar标签,并在AL中用一些字母调用它,它工作正常.当我尝试将内存地址加载到这样的消息时:

loadMsg      db "Loading",0
mov SI, loadMessage
call print
Run Code Online (Sandbox Code Playgroud)

我在QEMU仿真器上输出像'U'这样的垃圾作为输出.昨天,我编写了一个与此类似的代码,完全没有问题.是什么导致了我的问题以及如何解决?

assembly bios nasm bootloader x86-16

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

如何更改或设置8086组件中的背景色?

我正在学习8086汇编。我需要使用8086组件更改屏幕的背景色。我看了一些教程,他们只能设置屏幕的一部分。我不想通过DOS中断来执行此操作,而所有教程都在DOS中断中进行。如果有人向我展示使用BIOS中断设置整个屏幕(背景色)的代码,那将是很好的。

assembly operating-system kernel bootloader x86-16

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

在8086中从RAM加载程序

8086使用16位指令,但RAM地址只保存8位CPU如何从RAM加载程序?它是否加载一个地址,然后检查指令是否需要1/2/3字节(例如,将一个立即移动到一个8/16位寄存器)然后执行操作或者我错了一个RAM'空间'是16比特大?

assembly processor cpu-architecture x86-16

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

为什么我从mov ax,bx + si + 1得到零?

    mov     ax,10
    mov     bx,4
    mov     si,ax
    mov     ax,bx+si+1
    LEA     ax,[bx+si+1]
Run Code Online (Sandbox Code Playgroud)

当我一起添加bx,si和1并移动到ax时,结果为0.在下一行,当我使用LEA时,它可以工作,我得到15.

使用移动时为什么我会变零?

assembly x86-16 emu8086

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

我可以在TASM中将al推入堆栈吗?

我是集会的初学者,任何帮助将不胜感激.这是我的代码:

.MODEL SMALL

.DATA  
Textstring db "I'm a string$"
.CODE
START:

mov dx, Textstring
push dx
getche:
    mov ah, 06h
    int 21h
    push al



 END START
Run Code Online (Sandbox Code Playgroud)

我一直得到操作数类型在第8行上不匹配的错误,操作或指令的参数在第13行上有非法大小.
我猜测问题是我试图推进AL堆栈.无论如何我可以把内容推AL到堆栈上吗?我正在尝试创建一个代码,我提示用户输入一个字符并将该字符返回给调用它的程序.

assembly dos tasm x86-16

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

写入地址而不使用段寄存器

我知道这段代码实际上会将数据写入ds:[100h]

mov [100h], ax
Run Code Online (Sandbox Code Playgroud)

但是,如何在100H不使用段基的任何段寄存器的情况下直接写入线性地址?

x86 assembly real-mode nasm x86-16

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

8086中方向标记的用法

我在书中已经读到,当SI寄存器小于DI寄存器(在字符串操作中)时,方向标志等于0,否则方向标志等于1。

但是我也读过,指令通常不会改变方向标志,那么它的确切用法是什么?我们应该根据字符串的第一个和最后一个索引设置或取消设置此标志吗?(我们应该处理该标志还是让CPU处理?)

我在上述陈述中错了吗?

assembly x86-16

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

Find Segment address from given physical and effective address

how to find a segment address from given data?

Physical address = 0x119B, Effective address = 0x10AB

what could be the formula?

assembly real-mode memory-segmentation x86-16

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

如果我在程序中使用fsin查找值的sin,我会发现表达式语法错误

如果我使用fsin查找实数的sin值。我发现和表达语法错误。我在Dos上使用Turbo C ++ 3.0。

我一直在寻找x87 fpu中的指令列表。我试图谷歌一些信息。并将我在编译器设置上的指令集参考从8087更改为80287。

 #include<stdio.h>
    #include<math.h>

void main(){
    double a = 1.98,val;
    asm{
    fld a
    fsin
    fstp val
    }
    printf("%f", val);
}
Run Code Online (Sandbox Code Playgroud)

表达式sntax错误:fsin

assembly inline turbo-c++ x87 x86-16

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