Простое “Привет Мировая” Программа языка Встроенного ассемблерного кода в C/C++

я использую компилятор 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....

есть ли в коде что-то не так???

7
задан vs4vijay 31 December 2012 в 11:38
поделиться

2 ответа

Есть способ сделать это, не прибегая к вызову системы , нужно включить обертку примерно так:

#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 за то, что вы заметили это... Есть ссылка на сайт, который дал «универсальные процедуры блокировки» здесь .

-121--1073682-

Было бы неплохо вставить окружающий код/обработчики событий. Для начального пункта я бы предложил использовать селектор : флажок в первой строке:

$('#mytable input:checkbox:checked')

В руководстве написано:

$ (': флажок') эквивалентно $ ('*: флажок') , поэтому $ ('ввод: флажок') вместо этого.

Конечно, это может не иметь никакого значения. : флажок эквивалентен $ ('[type = флажок]') , поэтому может состоять в том, что ИС задыхается на входе : проверил часть селектора, которая тестирует все входные элементы для состояния проверено .

-121--3740490-

У меня нет компилятора 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), это все равно вызовет ошибку во время выполнения. Я попробую еще раз...

4
ответ дан 7 December 2019 в 10:01
поделиться

Просто поместите туда имя переменной:

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: Я не слишком хорошо разбираюсь в сборке.

2
ответ дан 7 December 2019 в 10:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: