Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- STACKSG SEGMENT PARA STACK
- DB 64 DUP(?)
- STACKSG ENDS
- DATASG SEGMENT PARA 'DATA'
- cnum db 6,8 DUP(' ');число в ASCII-коде
- LENSTR EQU $-CNUM ;кол-во цифр числа
- bnum Dw 0 ;двоичное число
- K DW 1 ;Переменный множитель
- K10 DW 10 ;Постоянный множитель
- CHISLO DB 0ah,0dh,"(X/2)+(X*3)-500=",8 DUP(' ')
- GREET db "please enter x [150:22500]",0AH,0DH,"X=",'$'
- DATASG ENDS
- CODESG SEGMENT PARA 'CODE'
- ASSUME CS:CODESG,DS:DATASG,SS:STACKSG
- ENTRY PROC FAR
- ; стандартная часть
- PUSH DS
- SUB AX,AX
- PUSH AX
- MOV AX,DATASG
- MOV DS,AX
- MOV AH,09 ;Вывести приглашение
- LEA DX,GREET
- INT 21H
- MOV AH,10 ;Ввод числа
- LEA DX,CNUM
- INT 21H
- xor cx,cx; очистка регистра
- MOV CL,CNUM+1 ; CX=количество цифр
- MOV SI,CX ; SI=индекс разряда числа
- inc si
- CIKL: MOV AL,CNUM[SI] ; AL=Цифра, читаем с младших разрядов
- AND AX,000Fh ; Перевод из ASCII в двоичный как в 3 лабе
- MUL K ; (DX,AX)=AX*K, DX=0
- ADD BNUM,AX ; BNUM=BNUM+AX
- MOV AX,K
- MUL K10
- MOV K,AX ;K=K*10
- DEC SI
- LOOP CIKL
- MOV AX,BNUM ; Подсчет
- mov cx, 7
- mul cx
- mov cx, 2
- div cx
- sub ax, 500
- mov cx, 10
- xor dx, dx
- cikl2:;Перевести во внешнее представление как в 3 лабе
- div cx
- add dl,30h
- push dx
- xor dx,dx
- inc bx ;счетчик кол-ва цифр в выходной строке
- cmp ax,0h
- jne cikl2
- xor si,si
- mov cx,bx
- mov si,22; для учета префикса
- cikl3: ;Формирование выходной строки
- pop dx
- mov chislo[si],dl
- inc si
- loop cikl3
- mov chislo[si],'$'
- MOV Ah,09h;Вывод ответа
- LEA DX,chislo
- SUB BX,BX
- MOV BL,5
- INT 21H
- MOV AH,10;pause
- xor dx,dx
- INT 21H
- RET
- ENTRY ENDP
- CODESG ENDS
- END ENTRY
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement