这可能是简单而愚蠢的,但无论如何我会问它,因为我似乎无法弄明白.
一个简单的代码片段:
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)
我想它与地址有关,它被一个字节或其他东西移动但我不完全确定,我真的需要理解.
提前致谢 !
编写在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'这样的垃圾作为输出.昨天,我编写了一个与此类似的代码,完全没有问题.是什么导致了我的问题以及如何解决?
我正在学习8086汇编。我需要使用8086组件更改屏幕的背景色。我看了一些教程,他们只能设置屏幕的一部分。我不想通过DOS中断来执行此操作,而所有教程都在DOS中断中进行。如果有人向我展示使用BIOS中断设置整个屏幕(背景色)的代码,那将是很好的。
8086使用16位指令,但RAM地址只保存8位CPU如何从RAM加载程序?它是否加载一个地址,然后检查指令是否需要1/2/3字节(例如,将一个立即移动到一个8/16位寄存器)然后执行操作或者我错了一个RAM'空间'是16比特大?
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.
使用移动时为什么我会变零?
我是集会的初学者,任何帮助将不胜感激.这是我的代码:
.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到堆栈上吗?我正在尝试创建一个代码,我提示用户输入一个字符并将该字符返回给调用它的程序.
我知道这段代码实际上会将数据写入ds:[100h]
mov [100h], ax
Run Code Online (Sandbox Code Playgroud)
但是,如何在100H不使用段基的任何段寄存器的情况下直接写入线性地址?
我在书中已经读到,当SI寄存器小于DI寄存器(在字符串操作中)时,方向标志等于0,否则方向标志等于1。
但是我也读过,指令通常不会改变方向标志,那么它的确切用法是什么?我们应该根据字符串的第一个和最后一个索引设置或取消设置此标志吗?(我们应该处理该标志还是让CPU处理?)
我在上述陈述中错了吗?
how to find a segment address from given data?
Physical address = 0x119B, Effective address = 0x10AB
what could be the formula?
如果我使用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