Ассемблерная вставка для ввода с клавиатуры значения переменной - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Нужен пример программы на си, в которой ввод с клавиатуры строки в переменную производится с помощью ассемблерной вставки

Решение задачи: «Ассемблерная вставка для ввода с клавиатуры значения переменной»

textual
Листинг программы
int cgetse(char far *s, int len)
{ 
__asm{
    les di, s
    mov cx, len
l:  xor ax,ax
    int 16h
    cmp ah, 1Ch
    jz  ex
    stosb
    mov ah, 0Eh
    xor bx, bx
    int 10h
    loop    l
ex:
    xor al,al
    stosb
; calc length
    mov ax, len
    sub ax, cx
    };
};

Объяснение кода листинга программы

В этом коде:

  1. les di, s — помещает в регистр DI адрес строки, которую необходимо считать.
  2. mov cx, len — переменной CX присваивается значение длины строки.
  3. xor ax,ax — АХ обнуляется.
  4. int 16h — происходит ввод с клавиатуры значения, которое будет сохранено в регистре АХ.
  5. cmp ah, 1Ch — происходит сравнение с кодом завершения ввода. Если он равен 1Сh, то происходит переход к метке ex.
  6. stosb — байт из регистра АХ записывается в буфер.
  7. mov ah, 0Eh — регистру АХ присваивается код функции вывода символа.
  8. xor bx, bx — обнуление регистра BX.
  9. int 10h — происходит вывод символа.
  10. loop l — происходит переход к метке l.
  11. xor al,al — обнуление регистра AL.
  12. stosb — байт из регистра AL записывается в буфер.
  13. mov ax, len — регистру АХ присваивается значение переменной len.
  14. sub ax, cx — вычисляется длина введенной строки.
  15. Код после } выполняет вычисления и использует значения переменных, которые не представлены в данном списке.

Оцени полезность:

6   голосов , оценка 4.167 из 5
Похожие ответы