;------------opisem segments komand-----------------------------------------------
code segment
assume cs:code,ds:data
main proc
mov ax,data ;initalizatiea
mov ds,ax ;registra ds
;-----------------------begin program---------------------------------------------
call number_str
;****vivod slujebnogo soobsenie***
mov ah,09h ;functiea vivoda
mov dx,offset msg ;adres soobseniea
int 21h
push cx
mov cx,num
mov bx,offset buf
Mloop:
mov ah,1
int 21h
mov [bx],al
inc bx
loop Mloop
pop cx
call point
call proc0_1
;-------------------------end of program------------------------------------------
EXIT:
mov ah,01 ;ostanovka programmi
int 21h ;v ojidanii najatiea klavisi
;zaversenie programmi
mov ax,4c00h
int 21h
main endp
;------------------SIMVOL-----------------------------
point proc
push ax
push si
push cx
mov ax,offset buf
;***sohraneaem stroku
mov act,ax ;facticeski vvedeno
;****proverim esti li v stroke krome tifirii esio kakieto simvoli
mov cx,act ;dlena vvedionnoi stroki
mov si,0 ;ukazateli v buffer
pop cx
pop si
pop ax
ret
point endp
;------------------SIMVOL END-------------------------------
;--------------procedura preobrazovaniea stroki v cislo--------
number_str proc
push ax
push bx
push cx
push dx
push si
mov es,ax
mov ah,9
mov dx,offset msg0
int 21h
mov ah,0ah
lea dx,maxl
int 21h
mov bx,offset str_1-1
xor ah,ah
mov al,arl
mov si,ax
m:
mov al,[bx+si]
sub al,30h
xor dx,dx
mul m10
add num,ax
dec si
mov ax,10
mul m10
mov m10,ax
cmp si,0
jne m
cld
pop si
pop dx
pop cx
pop bx
pop ax
RETN
number_str endp
;--------------konet proteduri---------------------------------
;-----------------functiea proverki susestvuet le v strok.simvoli krome cisel----
proc0_1 proc
push ax
push si
push dx
mov al,buf[si] ;vozmiom simvol
cmp al,'9' ;menise 9?
jbe one ;da perehod na sleduiusii simvol
cmp al,'9' ;bolise 9?
ja null ;perehod na Exit of program
null:
mov ah,09h ;funktiea vivoda
mov dx,offset msg1 ;adres soobseniea
int 21h
jmp EXIT
one:
inc si ;smestim ukazateli
loop proc0_1 ;tikl po vsem simvolam
mov ah,09h ;functiea vivoda
mov dx,offset msg2 ;adres soobseniea
int 21h
pop dx
pop si
pop ax
ret
proc0_1 endp
;---------------------------
code ends ;konet segmenta koda
;----------------------------opisim segment dannih--------------------------------
data segment
msg0 db "vvedite razmernosti stroki Sn,N=$"
msg db "vvedite stroku!$"
msg1 db 10,13,"0",'$'
msg2 db 10,13,"1",'$'
buf db 100 dup('') ;buffer vvoda
act dw 0
ns db 10,13,'$'
maxl db 6
arl db 6
str_1 db 6 dup('?')
num dw 0
m10 dw 1
data ends
;-----------------------------opisem segment steka--------------------------------
stk segment stack
dw 128 dup('')
stk ends
end main
asm -вечные вопросы!!
Помогите наити ошибку в коде! суть такова "дана строка Sn. с n- елементами : если введены только цифры выводить 1, в противном случее 0"
Не происходит вызов процидуры :number_str
вод код:
Код: