简体   繁体   中英

assembly 8086 - Getting an overflow

I have a very basic question. I'm writing in assembler, and I need to declare a word in the data segment, so I wrote:

.model small
.stack 32h
.data
    X DW A0B0h

However, it won't compile. the compiler says "overflow! cannot be evaluated," and I don't understand why. A word is 2 bytes, A0b0h is 2 bytes (4 nibblets each hexa char, there are 4 chars, so 16 nibblets, that's 2 bytes).

And also, why is it that some people write values like this:

A DB 0120h

rather than:

A DB 120h

Could it be related to my error?

The first step an assembler makes when it processes your source code is to tokenize it. Splitting the file content into identifiable categories of tokens, a parser then interprets them. Like keyword, number, symbol, string, punctuation. A number is recognized by it starting with the digits 0..9. A symbol is recognized by it starting with a letter.

So "A0B0h" is not recognized as a number, it is a symbol. Like "X". You must write it as 0A0B0h , now it is a number.

You don't exactly get a very good error message for it, "overflow" is pretty bewildering of course. The assembler might jump the gun, it can't complain about an unknown identifier until the second pass. Perhaps already deciding in the 1st pass that it can't stick a 32-bit address into a 16-bit variable, something like that.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM