-
inline assembly question
How would you go about using a C style string in inline assembly?
I have been working on this for quite awhile now...but cant get it to work...here is my code, its not long:
Code:
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
char string[20];
int main (void)
{
memset(string, 0, 20);
asm {
mov dx, seg string
mov ds, dx
lea dx, string
mov ah, 0Ah
int 21h
}
printf("%s", string);
getch();
return 0;
}
It is supposed to input a string, then print it, wait for a keypress, and exit..
however, it is not inputting, just going straight to the getch()...anybody good with inline assembly around here that could help out?
-
Well, looks fine to me, but then again my assembler is a bit rusty.
-
string should be unsigned char
also you are not pushing DS - therefore your program will probably crash.
if you alter DS inside of C or assembly you must push it's current value so you can restore it later
Your code will cause system instability next time you try to access something in your data segment.
-
You could ditch the DOS interupts and call the c functions (so it would have a tiny bit more portability) -
Code:
char n[20];
char format[] ="%s";
int main()
{
__asm{
lea eax,n
lea ebx,format
push eax
push ebx
call scanf
add esp,8
}
printf(format,n);
return 0;
}