Как объединить строки в сборке lamguage для 8086 в nasm

#assembly #nasm #x86-16

Вопрос:

Я пытался :-

 [org 0x100] 


data segment

fn db 'Atul

но это дает мне такую ошибку, как

данные, исключенные из инструкции, переопределены

Пожалуйста, скажите мне желаемый ответ, а также что не так в моем коде


Комментарии:

1. Вы пытаетесь создать .COM файл с двумя сегментами. Но (древний) .COM формат файла допускает только один сегмент. Но это только одна ошибка. В какой строке возникает ошибка?

2. data ends - это синтаксис MASM. NASM не нужна строка для объявления конца раздела или сегмента: эта строка будет проанализирована так же , как data: ends , например, при попытке определить вызываемый символ data . Тот же символ уже был определен строкой data segment , которая анализировалась как data: segment , потому что в NASM segment есть директива, поэтому segment .data вы обычно переключаетесь на раздел/сегмент .data. (Но, как сказал @zx485,. com-это плоский двоичный файл, поэтому просто поместите свои данные в конец, а не вверху, где они будут выполняться в виде инструкций.)

3. Вы получаете эту ошибку, связанную с конфликтом символов, еще до того, как NASM начнет жаловаться на то, что segment и ends не являются допустимыми мнемоническими инструкциями или макросами, которые вы определили.

4. "Пожалуйста, скажите мне желаемый ответ"?

5. Можете ли вы уточнить, что вы подразумеваете под "объединением строк"? Является ли желаемый вывод для ввода двух указателей на ('$' завершен?) строки и скопировать их оба в третий буфер памяти (также завершенный"$")? Или записать обе строки последовательно в консоль? Или что-то еще?

ln db 'Dagurно это дает мне такую ошибку, как

данные, исключенные из инструкции, переопределены

Пожалуйста, скажите мне желаемый ответ, а также что не так в моем коде

Комментарии:

1. Вы пытаетесь создать .COM файл с двумя сегментами. Но (древний) .COM формат файла допускает только один сегмент. Но это только одна ошибка. В какой строке возникает ошибка?

2. data ends - это синтаксис MASM. NASM не нужна строка для объявления конца раздела или сегмента: эта строка будет проанализирована так же , как data: ends , например, при попытке определить вызываемый символ data . Тот же символ уже был определен строкой data segment , которая анализировалась как data: segment , потому что в NASM segment есть директива, поэтому segment .data вы обычно переключаетесь на раздел/сегмент .data. (Но, как сказал @zx485,. com-это плоский двоичный файл, поэтому просто поместите свои данные в конец, а не вверху, где они будут выполняться в виде инструкций.)

3. Вы получаете эту ошибку, связанную с конфликтом символов, еще до того, как NASM начнет жаловаться на то, что segment и ends не являются допустимыми мнемоническими инструкциями или макросами, которые вы определили.

4. "Пожалуйста, скажите мне желаемый ответ"?

5. Можете ли вы уточнить, что вы подразумеваете под "объединением строк"? Является ли желаемый вывод для ввода двух указателей на ('$' завершен?) строки и скопировать их оба в третий буфер памяти (также завершенный"$")? Или записать обе строки последовательно в консоль? Или что-то еще?

data ends

code segment

mov ax,@data
mov ds,ax
mov ah,
mov bh, ln
add ah,bh
add ah, 'но это дает мне такую ошибку, как

данные, исключенные из инструкции, переопределены

Пожалуйста, скажите мне желаемый ответ, а также что не так в моем коде

Комментарии:

1. Вы пытаетесь создать .COM файл с двумя сегментами. Но (древний) .COM формат файла допускает только один сегмент. Но это только одна ошибка. В какой строке возникает ошибка?

2. data ends - это синтаксис MASM. NASM не нужна строка для объявления конца раздела или сегмента: эта строка будет проанализирована так же , как data: ends , например, при попытке определить вызываемый символ data . Тот же символ уже был определен строкой data segment , которая анализировалась как data: segment , потому что в NASM segment есть директива, поэтому segment .data вы обычно переключаетесь на раздел/сегмент .data. (Но, как сказал @zx485,. com-это плоский двоичный файл, поэтому просто поместите свои данные в конец, а не вверху, где они будут выполняться в виде инструкций.)

3. Вы получаете эту ошибку, связанную с конфликтом символов, еще до того, как NASM начнет жаловаться на то, что segment и ends не являются допустимыми мнемоническими инструкциями или макросами, которые вы определили.

4. "Пожалуйста, скажите мне желаемый ответ"?

5. Можете ли вы уточнить, что вы подразумеваете под "объединением строк"? Является ли желаемый вывод для ввода двух указателей на ('$' завершен?) строки и скопировать их оба в третий буфер памяти (также завершенный"$")? Или записать обе строки последовательно в консоль? Или что-то еще?

lea dh,ah

;output the string
;loaded in dx
mov AH,0x09
int 0x21

code ends

mov ax,0x4c00
int 0x21
но это дает мне такую ошибку, как

данные, исключенные из инструкции, переопределены

Пожалуйста, скажите мне желаемый ответ, а также что не так в моем коде

Комментарии:

1. Вы пытаетесь создать .COM файл с двумя сегментами. Но (древний) .COM формат файла допускает только один сегмент. Но это только одна ошибка. В какой строке возникает ошибка?

2. data ends — это синтаксис MASM. NASM не нужна строка для объявления конца раздела или сегмента: эта строка будет проанализирована так же , как data: ends , например, при попытке определить вызываемый символ data . Тот же символ уже был определен строкой data segment , которая анализировалась как data: segment , потому что в NASM segment есть директива, поэтому segment .data вы обычно переключаетесь на раздел/сегмент .data. (Но, как сказал @zx485,. com-это плоский двоичный файл, поэтому просто поместите свои данные в конец, а не вверху, где они будут выполняться в виде инструкций.)

3. Вы получаете эту ошибку, связанную с конфликтом символов, еще до того, как NASM начнет жаловаться на то, что segment и ends не являются допустимыми мнемоническими инструкциями или макросами, которые вы определили.

4. «Пожалуйста, скажите мне желаемый ответ»?

5. Можете ли вы уточнить, что вы подразумеваете под «объединением строк»? Является ли желаемый вывод для ввода двух указателей на (‘$’ завершен?) строки и скопировать их оба в третий буфер памяти (также завершенный»$»)? Или записать обе строки последовательно в консоль? Или что-то еще?