я использую компилятор C Borland и devcpp....
asm {
mov ax,4 // (I/O Func.)
mov bx,1 // (Output func)
mov cx,&name // (address of the string)
mov dx,6 // (length of the string)
int 0x21 // system call
}
в вышеупомянутых фрагментах кода я хочу распечатать строку с помощью ассемблера..., но как я могу поместить адрес строки в регистре cx....
есть ли в коде что-то не так???
Есть способ сделать это, не прибегая к вызову системы
, нужно включить обертку примерно так:
#include <sys/sendfile.h>
#include <fcntl.h>
#include <unistd.h>
/*
** http://www.unixguide.net/unix/programming/2.5.shtml
** About locking mechanism...
*/
int copy_file(const char *source, const char *dest){
int fdSource = open(source, O_RDWR);
/* Caf's comment about race condition... */
if (fdSource > 0){
if (lockf(fdSource, F_LOCK, 0) == -1) return 0; /* FAILURE */
}else return 0; /* FAILURE */
/* Now the fdSource is locked */
int fdDest = open(dest, O_CREAT);
off_t lCount;
struct stat sourceStat;
if (fdSource > 0 && fdDest > 0){
if (!stat(source, &sourceStat)){
int len = sendfile(fdDest, fdSource, &lCount, sourceStat.st_size);
if (len > 0 && len == sourceStat.st_size){
close(fdDest);
close(fdSource);
/* Sanity Check for Lock, if this is locked -1 is returned! */
if (lockf(fdSource, F_TEST, 0) == 0){
if (lockf(fdSource, F_ULOCK, 0) == -1){
/* WHOOPS! WTF! FAILURE TO UNLOCK! */
}else{
return 1; /* Success */
}
}else{
/* WHOOPS! WTF! TEST LOCK IS -1 WTF! */
return 0; /* FAILURE */
}
}
}
}
return 0; /* Failure */
}
В приведенном выше примере (проверка ошибок опущена!) используется open
, close
и sendfile
.
Изменить: Как caf указал на расовое условие может возникнуть между open
и stat
, поэтому я подумал, что сделаю это немного более надежным... Имейте в виду, что механизм блокировки варьируется от платформы к платформе... под Linux этого механизма блокировки с lockf
будет достаточно Если вы хотите сделать этот портативный, используйте макросы # ifdef
, чтобы различать различные платформы/компиляторы... Спасибо caf за то, что вы заметили это... Есть ссылка на сайт, который дал «универсальные процедуры блокировки» здесь .
Было бы неплохо вставить окружающий код/обработчики событий. Для начального пункта я бы предложил использовать селектор : флажок
в первой строке:
$('#mytable input:checkbox:checked')
В руководстве написано:
$ (': флажок')
эквивалентно$ ('*: флажок')
, поэтому$ ('ввод: флажок')
вместо этого.
Конечно, это может не иметь никакого значения. : флажок
эквивалентен $ ('[type = флажок]')
, поэтому может состоять в том, что ИС задыхается на входе : проверил
часть селектора, которая тестирует все входные элементы для состояния проверено
.
У меня нет компилятора Borland, поэтому я могу неправильно запомнить его синтаксис, но если вы попробовали это:
asm {
mov ax,4 // (I/O Func.)
mov bx,1 // (Output func)
lds cx,"Hello, world" // (address of the string)
mov dx,6 // (length of the string)
int 0x21 // system call
}
или это:
char msg[] = "Hello, world";
asm {
mov ax,4 // (I/O Func.)
mov bx,1 // (Output func)
lds cx, msg // (address of the string)
mov dx,6 // (length of the string)
int 0x21 // system call
}
изменить: , хотя это будет скомпилировано (теперь, когда я изменил MOV на LDS), это все равно вызовет ошибку во время выполнения. Я попробую еще раз...
Просто поместите туда имя переменной:
mov ax,4 // (I/O Func.)
mov bx,1 // (Output func)
mov cx,name // (address of the string)
mov dx,6 // (lenght of the string)
int 0x21 // system call
Disclaimer: Я не слишком хорошо разбираюсь в сборке.