Problem in linking an nasm code

Posted by Stefano on Stack Overflow See other posts from Stack Overflow or by Stefano
Published on 2010-04-27T09:50:13Z Indexed on 2010/04/27 9:53 UTC
Read the original article Hit count: 595

Filed under:
|
|
|
|

I'm using a computer with an Intel Core 2 CPU and 2GB of RAM. The SO is Ubuntu 9.04. When I try to compile this code:

;programma per la simulazione di un terminale su PC, ottenuto utilizzando l'8250

;in condizione di loopback , cioè Tx=Rx

section .code64

section .data

TXDATA EQU 03F8H ;TRASMETTITORE

RXDATA EQU 03F8H ;RICEVITORE

BAUDLSB EQU 03F8H ;DIVISORE DI BAUD RATE IN LSB

BAUDMSB EQU 03F9H ;DIVISORE DI BAUD RATE IN MSB

INTENABLE EQU 03F9H ;REGISTRO DI ABILITAZIONE DELL'INTERRUZIONE

INTIDENTIF EQU 03FAH ;REGISTRO DI IDENTIFICAZIONE DELL'INTERRUZIONE

LINECTRL EQU 03FBH ;REGISTRO DI CONTROLLO DELLA LINEA

MODEMCTRL EQU 03FCH ;REGISTRO DI CONTROLLO DEL MODEM

LINESTATUS EQU 03FDH ;REGISTRO DI STATO DELLA LINEA

MODEMSTATUS EQU 03FEH ;REGISTRO DI STATO DEL MODEM

BAUDRATEDIV DW 0060H ;DIVISOR: LOW=60, HIGH=00 ->BAUD =9600

COUNTERCHAR DB 0 ;CHARACTER COUNTER

;DW 256 DUP (?)

section .text

global _start

_start:

;PROGRAMMAZIONE 8250

MOV DX,LINECTRL

MOV AL,80H ;BIT 7=1 PER INDIRIZZARE IL BAUD RATE

OUT DX,AL

MOV DX,BAUDLSB

MOV AX,BAUDRATEDIV ;DEFINISCO FATTORE DI DIVISIONE

OUT DX,AL

MOV DX,BAUDMSB

MOV AL,AH

OUT DX,AL ;MSB

MOV DX,LINECTRL

MOV AL,00000011B ;8 BIT DATO, 1 STOP, PARITA' NO

OUT DX,AL

MOV DX,MODEMCTRL

MOV AL,00010011B ;BIT 4=0 PER NO LOOPBACK

OUT DX,AL

MOV DX,INTENABLE

XOR AL,AL ;DISABILITO TUTTI GLI INTERRUPTS

OUT DX,AL

CICLO:

MOV DX,LINESTATUS

IN AL,DX ;LEGGO IL REGISTRO DI STATO DELLA LINEA

TEST AL,00011110B ;VERIFICO GLI ERRORI (4 TIPI)

JNE ERRORI

TEST AL,01H ;VERIFICO Rx PRONTO

JNE LEGGOCHAR

TEST AL,20H ;VERIFICO Tx VUOTO

JE CICLO

;SE SI ARRIVA A QUESTO PUNTO ALLORA L'8250 è PRONTO PER TRASMETTERE UN NUOVO CARATTERE

MOV AH,1

INT 80H

JE CICLO

;SE SI ARRIVA A QUESTO PUNTO SIGNIFICA CHE ESISTE UN CARATTERE DA TASTIERA

MOV AH,0

INT 80H

;Al CONTIENE IL CARATTERE DELLA TASTIERA

MOV DX,3F8H

OUT DX,AL

JMP CICLO

LEGGOCHAR:

MOV AL,[COUNTERCHAR]

INC AL

CMP AL,15

JE FINE

MOV [COUNTERCHAR],AL

MOV DX,TXDATA

IN AL,DX ;AL CONTIENE IL CARATTERE RICEVUTO

AND AL,7FH ;POICHè VI SONO 7 BIT DI DATO

;VISUALIZZAZIONE DEL CARATTERE

MOV BX,0

MOV AH,14

INT 80H

POP AX

CMP AL,0DH ;CONTROLLO SE RETURN

JNE CICLO

;CAMBIO RIGA DI VISUALIZZAZIONE

MOV AL,0AH

MOV BX,0

MOV AH,14

;INT 10H INT 80H

JMP CICLO

;GESTIONE ERRORI

ERRORI:

MOV DX,3F8H

IN AL,DX

MOV AL,'?'

MOV BX,0

MOV AH,14

INT 80H

JMP CICLO

FINE:

XOR AH,AH

MOV AL,03

INT 80H

When I compile this code "NASM -f bin UARTLOOP.asm", the compiler can create the UARTLOOP.o file without any error. When I try to link the .o file with "ld UARTLOOP.o" it tells:

UARTLOOP.o: In function `_start':

UARTLOOP.asm:(.text+0xd): relocation truncated to fit: R_X86_64_16 against `.data'

Have u got some ideas to solve this problem? Thx =)

© Stack Overflow or respective owner

Related posts about nasm

Related posts about linker