помогите пожалуйста.
.model small
.stack 100h
.data
mseee db "Writeln: $"
msgeee db "Character count: $"
sk0 db "zero$"
sk1 db "one$"
sk2 db "two$"
sk3 db "three$"
sk4 db "four$"
sk5 db "five$"
sk6 db "six$"
sk7 db "seven$"
sk8 db "eight$"
sk9 db "nine$"
string db 100 dup (10,13,"$")
enteris db 13,10,'$'
.code
Start:
mov ax, @data
mov ds, ax
mov ah, 09h
mov dx, offset mseee
int 21h
mov ah, 0Ah
mov dx, offset string
int 21h
mov ah, 09h
mov dx, offset enteris
int 21h
mov ax, offset string
mov si, ax
add si, 2
Search:
mov al, [si]
inc si
cmp al, 30h
je Zero
cmp al, 31h
je One
cmp al, 32h
je Two
cmp al, 33h
je Three
cmp al, 34h
je Four
cmp al, 35h
je Five
cmp al, 36h
je Six
cmp al, 37h
je Seven
cmp al, 38h
je Eight
cmp al, 39h
je Nine
Check:
cmp al, "$"
je Output
mov ah,02h
mov dl, al
int 21h
jmp Search
Zero:
mov ah,09h
mov dx, offset sk0
int 21h
jmp Search
One:
mov ah,09h
mov dx, offset sk1
int 21h
jmp Search
Two:
mov ah,09h
mov dx, offset sk2
int 21h
jmp Search
Three:
mov ah,09h
mov dx, offset sk3
int 21h
jmp Search
Four:
mov ah,09h
mov dx, offset sk4
int 21h
jmp Search
Five:
mov ah,09h
mov dx, offset sk5
int 21h
jmp Search
Six:
mov ah,09h
mov dx, offset sk6
int 21h
jmp Search
Seven:
mov ah,09h
mov dx, offset sk7
int 21h
jmp Search
Eight:
mov ah,09h
mov dx, offset sk8
int 21h
jmp Search
Nine:
mov ah,09h
mov dx, offset sk9
int 21h
jmp Search
Output:
mov ax, 4C00h
int 21h
END start
Другие языки программирования и технологии
assembler tasm - надо сосчитать сколько елементов было введено
Как продолжение этого ответа
Теперь идея немного другая. Используется массив строк с фиксированной длиной (массив названий цифр, каждое название длиной 6 байт, символ-заполнитель "доллар"). Замена цифр их названиями также происходит в промежуточном буфере с последующим выводом его содержимого в консоль.
Длина введённой строки здесь определяется так.
Сначала ищется конец введённой строки (байт со значением 0Dh), затем из адреса этого байта вычитается адрес начала и получается длина строки.
Символьное представление длины записывается сразу после текста "Character count: ", а потом вся сформированная строка выводится в консоль.
.model small
.stack 100h
.data
mseee db "Writeln: $"
msgeee db "Character count: "
strlen db "$$$$"
Names db "zero$$","one$$$","two$$$","three$","four$$"
db "five$$","six$$$","seven$","eight$","nine$"
enteris db 13,10,'$'
inbuff db 100
len db ?
string db 100 dup (?)
buffer db 496 dup ('$')
.code
Start:
mov ax, @data
mov ds, ax
mov es, ax
mov ah, 09h
mov dx, offset mseee
int 21h
mov ah, 0Ah
mov dx, offset inbuff
int 21h
mov ah, 09h
mov dx, offset enteris
int 21h
;Определение длины, поиском адреса маркера окончания введённой строки 0Dh
mov cx,-1
lea di,string
mov al,0Dh
repne scasb
dec di
sub di,offset string; из адреса маркера вычесть адрес начала = длина
mov ax,di
xor cx,cx
mov dl,10
DivLen:
div dl
push ax
inc cx
xor ah,ah
or al,al
jnz DivLen
lea di,strlen
LenChar:
pop ax
xchg ah,al
or al,30h
stosb
loop LenChar
lea dx,msgeee
mov ah,9
int 21h
mov dx, offset enteris
int 21h
mov si, offset string
lea di,buffer
Repeat:
lodsb
cmp al,0Dh
je OutString
cmp al,'0'
jb CopyChar
cmp al,'9'
jbe CopyNumber
CopyChar:
stosb
jmp Repeat
CopyNumber:
sub al,'0'
mov bl,6
mul bl
mov bx,ax
CopySymb:
mov al,Names[bx]
cmp al,'$'
jz Repeat
stosb
inc bx
jmp CopySymb
OutString:
lea dx,buffer
mov ah,9
int 21h
xor ah,ah
int 16h
mov ax, 4C00h
int 21h
end start

Теперь идея немного другая. Используется массив строк с фиксированной длиной (массив названий цифр, каждое название длиной 6 байт, символ-заполнитель "доллар"). Замена цифр их названиями также происходит в промежуточном буфере с последующим выводом его содержимого в консоль.
Длина введённой строки здесь определяется так.
Сначала ищется конец введённой строки (байт со значением 0Dh), затем из адреса этого байта вычитается адрес начала и получается длина строки.
Символьное представление длины записывается сразу после текста "Character count: ", а потом вся сформированная строка выводится в консоль.
.model small
.stack 100h
.data
mseee db "Writeln: $"
msgeee db "Character count: "
strlen db "$$$$"
Names db "zero$$","one$$$","two$$$","three$","four$$"
db "five$$","six$$$","seven$","eight$","nine$"
enteris db 13,10,'$'
inbuff db 100
len db ?
string db 100 dup (?)
buffer db 496 dup ('$')
.code
Start:
mov ax, @data
mov ds, ax
mov es, ax
mov ah, 09h
mov dx, offset mseee
int 21h
mov ah, 0Ah
mov dx, offset inbuff
int 21h
mov ah, 09h
mov dx, offset enteris
int 21h
;Определение длины, поиском адреса маркера окончания введённой строки 0Dh
mov cx,-1
lea di,string
mov al,0Dh
repne scasb
dec di
sub di,offset string; из адреса маркера вычесть адрес начала = длина
mov ax,di
xor cx,cx
mov dl,10
DivLen:
div dl
push ax
inc cx
xor ah,ah
or al,al
jnz DivLen
lea di,strlen
LenChar:
pop ax
xchg ah,al
or al,30h
stosb
loop LenChar
lea dx,msgeee
mov ah,9
int 21h
mov dx, offset enteris
int 21h
mov si, offset string
lea di,buffer
Repeat:
lodsb
cmp al,0Dh
je OutString
cmp al,'0'
jb CopyChar
cmp al,'9'
jbe CopyNumber
CopyChar:
stosb
jmp Repeat
CopyNumber:
sub al,'0'
mov bl,6
mul bl
mov bx,ax
CopySymb:
mov al,Names[bx]
cmp al,'$'
jz Repeat
stosb
inc bx
jmp CopySymb
OutString:
lea dx,buffer
mov ah,9
int 21h
xor ah,ah
int 16h
mov ax, 4C00h
int 21h
end start

не спрашивай здесь про асм мало спецов лучше на форуме какомто
Похожие вопросы
- assembler tasm
- assembler tasm - в чем ошибка?
- TASM. В какой части кода объявляются структуры в язяке ASSEMBLER?
- Как на TASM Assembler вывести число 12345 с помощью цикла ?
- Системное время в TAsm и MAsm
- Вопрос по Ассемблеру - Ввести с клавы 3 слова и вывести их на экран лесенкой Tasm
- Ассемблер (TASM). Нужно ввести строку и с помощу команд обработки цепочек подсчитать кол-во русской буквы "в" в строке
- Код assembler. Ввести массив из 10 чисел и вычислить сумму его элементов, меньших 10. Помогите, пжлст
- Assembler или C для микроконтроллеров?
- А почему программы написанные на C/C#/C++ имеют больший вес чем на tasm/masm?