Ассемблерная вставка для ввода с клавиатуры значения переменной - 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
};
};
Объяснение кода листинга программы
В этом коде:
les di, s— помещает в регистр DI адрес строки, которую необходимо считать.mov cx, len— переменной CX присваивается значение длины строки.xor ax,ax— АХ обнуляется.int 16h— происходит ввод с клавиатуры значения, которое будет сохранено в регистре АХ.cmp ah, 1Ch— происходит сравнение с кодом завершения ввода. Если он равен 1Сh, то происходит переход к меткеex.stosb— байт из регистра АХ записывается в буфер.mov ah, 0Eh— регистру АХ присваивается код функции вывода символа.xor bx, bx— обнуление регистра BX.int 10h— происходит вывод символа.loop l— происходит переход к меткеl.xor al,al— обнуление регистра AL.stosb— байт из регистра AL записывается в буфер.mov ax, len— регистру АХ присваивается значение переменной len.sub ax, cx— вычисляется длина введенной строки.- Код после
}выполняет вычисления и использует значения переменных, которые не представлены в данном списке.