Та
Татьянка

assembler tasm - надо сосчитать сколько елементов было введено

помогите пожалуйста.

.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

Егор Селихов
Егор Селихов

Как продолжение этого ответа

Теперь идея немного другая. Используется массив строк с фиксированной длиной (массив названий цифр, каждое название длиной 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

БТ
Борис Тарханов

не спрашивай здесь про асм мало спецов лучше на форуме какомто

Похожие вопросы
Bonpoc no TASM (BHyTpu) турбо ассемблер. Ребятушки, какой TASM лучше для Windows 7? TASM 4.1 покатит ?
Как на TASM Assembler вывести число 12345 с помощью цикла ?
как сосчитать сколько раз было введено число в c++
Assembler: Взаимодействие с пользователем
TASM это Visual ASM? Где скачать TASM? Где купить лицензию TASM?
Assembler!!! help me!!
С чего начать? Assembler
Assembler. Как описать переменную?
Помогите с лабораторной на TASM
Помогите с программой на TASM