;I am using:

;gcc (Ubuntu 4.9.3-8ubuntu2~14.04) 4.9.3
;g++ (Ubuntu 4.9.3-8ubuntu2~14.04) 4.9.3

;I keep getting the following error:

;ch4p5.s:13: error: parser: instruction expected
;ch4p5.s:15: error: parser: instruction expected

;How do I fix it?

;Here is what I have:

%include "macros_windows64.s"

.MODEL SMALL

.STACK 100H

@DATA:
PROMPT_1 db 'Enter the hexadecimal number ( max 4-digit ) : $'
PROMPT_2 db 0DH,0AH,'The equivalent 16-bit binary number is : $'
ILLEGAL db 0DH,0AH,'Illegal hex number. Try again : $'
COUNT db ?

.CODE
.STARTUP

MAIN_PROC:
MOV AX, @DATA ; initialize DS
MOV DS, AX

LEA DX, [PROMPT_1] ; load and display the string PROMPT_1
MOV AH,9
INT 21H

JMP @START ; jump to label @START_2

@START_1: ; jump label
LEA DX, [ILLEGAL] ; load and display the string ILLEGAL
MOV AH, 9
INT 21H

@START: ;
XOR BX,BX ; clear BX
MOV [COUNT],30H ; initialize loop counter

@START_2: ; jump label
MOV AH, 1 ; set input function
INT 21H ; read a character

CMP AL, 0DH ; compare Al with CR
JNE @SKIP ; jump to label @SKIP if AL!=CR

CMP [COUNT],30H ; compare COUNT with 0
JBE @START_1 ; jump to label @START_1 if COUNT<=0
JMP @END ; jump to label @END

@SKIP: ; jump label

CMP AL, "A" ; compare AL with "A"
JB @DECIMAL ; jump to label @DECIMAL if AL<A

CMP AL, "F" ; compare AL with "F"
JA @START_1 ; jump to label @START_1 if AL>F
ADD AL, 09H ; add 9 to AL
JMP @OK ; jump to label @OK

@DECIMAL: ; jump label
CMP AL, 30H ; compare AL with 0
JB @START_1 ; jump to label @START_1 if AL<0

CMP AL, 39H ; compare AL with 9
JA @START_1 ; jump to label @START_1 if AL>9

@OK: ; jump label

INC [COUNT] ; increment the COUNT variable

AND AL, 0FH ; convert the ascii into binary code

MOV CL, 4 ; set CL=4
SHL AL, CL ; shift AL towards left by 4 positions

MOV CX, 4 ; set CX=4

@LOOP_1: ; loop label
SHL AL, 1 ; shift AL towards left by 1 position
RCL BX, 1 ; rotate BX towards left by 1 position
; through carry
LOOP @LOOP_1 ; jump to label @LOOP_1 if CX!=0

CMP [COUNT], 34H ; compare COUNT with 4
JE @END ; jump to label @END if COUNT=4
JMP @START_2 ; jump to label @START_2

@END: ; jump label

LEA DX, [PROMPT_2] ; load and display the string PROMPT_2
MOV AH, 9
INT 21H

MOV CX, 16 ; set CX=16
MOV AH, 2 ; set output function

@LOOP_2: ; loop label
SHL BX, 1 ; shift BX towards left by 1 position
JC @ONE ; jump to label @ONE if CF=1
MOV DL,30H ; set DL=0
JMP @DISPLAY ; jump to label @DISPLAY

@ONE: ; jump label
MOV DL, 31H ; set DL=1

@DISPLAY: ; jump label
INT 21H ; display a character
LOOP @LOOP_2 ; jump to label @LOOP_2 if CX!=0

MOV AH, 4CH ; return control
INT 21H
done:
.EXIT

Recommended Answers

All 3 Replies

It's a shame you pasted this way. Otherwise I would have headed to those lines and took a closer look. Since the line numbers are off it's harder. Try pasting the code so that the line numbers match your assembler errors.

It would be lines 17 and 19 on here.

This looks like assembly code, not GCC. Try gasm? Or is there more to this story like you want some x86 assember?

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.