English 中文(简体)
NASM on DOS (Intel 8086): invalid effective address
原标题:

I am writing code for DOS using Bochs. I am compiling the program using NASM
Lets suppose i have the following code:

[BITS 16]

    SEGMENT code

..start:
mov ax, data
mov ds, ax
mov bx, msg
mov al, byte [bx]
int 21h

    SEGMENT data

msg  DB "teststring", 00h

Why is it that nasm complains on the line:

mov al, byte [bx]

of invalid effective address?

If instead of using bx i use the si registry, the program compiles an works as supposed, loading the ascii value of t in al.

Why is it?

EDIT: Found that I can t use BX for indexing.
If I wanted to load what s pointed in a determined part of the data segment, you could do the following:

mov ax, data
mov ds, ax
mov si, msg
mov al, byte [si] ; Loading first char
inc si
mov al, byte [si] ; Loading second char

If I wanted to keep si pointing to the start of the string, i could then use BX to be the offset:

mov al, byte [si + bx]

or even

mov al, byte [si + n] ; where n is an integer value

But to my understanding, bx could also be used, so the problem still resides.

问题回答

I think you made more than one typo in your question :-) First of, in 16 bit mode [bp][bx][si][di] are all valid addressing modes. Even the old 8086 can use [bx] as an effective address. Where as [dx] can not be used in 16 bit mode, afaik it needs to be running in 32 bit mode. Together with your line

mov dx, msg

preceding

mov al, byte [bx]

I assume you wrote in fact mov al, [dx] and nasm is correctly complaining about [dx] as an invalid address. So if you meant, you found out you can t use [bx], you were wrong - you found out that you need to take more care in not misspelling "b" for "d".

You sure the error is not on this line?

mov ds, data

Perhaps you meant:

mov ds, ax




相关问题
Signed executables under Linux

For security reasons, it is desirable to check the integrity of code before execution, avoiding tampered software by an attacker. So, my question is How to sign executable code and run only trusted ...

encoding of file shell script

How can I check the file encoding in a shell script? I need to know if a file is encoded in utf-8 or iso-8859-1. Thanks

How to write a Remote DataModule to run on a linux server?

i would like to know if there are any solution to do this. Does anyone? The big picture: I want to access data over the web, using my delphi thin clients. But i´would like to keep my server/service ...

How can I use exit codes to run shell scripts sequentially?

Since cruise control is full of bugs that have wasted my entire week, I have decided the existing shell scripts I have are simpler and thus better. Here is what I have so far svn update /var/www/...

Good, free, easy-to-use C graphics libraries? [closed]

I was wondering if there were any good free graphics libraries for C that are easy to use? It s for plotting 2d and 3d graphs and then saving to a file. It s on a Linux system and there s no gnuplot ...

热门标签