Привести блок-схему в соответствие с кодом - Assembler
Формулировка задачи:
Ребят, извиняюсь, но это опять я, нерадивый студент.
Вот есть такой код, все работает, все как надо. проблем нет
К нему идёт такая блок схема.
При попытке сдать лабу, преподаватель сделал такую пометку, уже 4ро человек посмотрело, и мы не можем понять, где ошибка.
include 'emu8086.inc'
#make_COM#
; COM file is loaded at CS:0100h
ORG 100h
JMP START
task db 10, 13, 'Лабораторнаяработа №4'
db 10, 13, 'Y=(x-a)^n'
db 10, 13, '$'
msg_x db 10, 13, 'Введите x: $'
msg_a db 10, 13, 'Введите a: $'
msg_n db 10, 13, 'Введите n: $'
msg_y db 10, 13, 'У = ', '$'
x dw ?
a dw ?
n dw ?
y dw 1
yy dw ?
START:
;вывод задания на экран
LEA DX, task
MOV AH, 9
INT 21h
;ввод x
LEA DX, msg_x
MOV AH, 9
INT 21h
call SCAN_NUM
MOV x, CX
;ввод a
LEA DX, msg_a
MOV AH, 9
INT 21h
call SCAN_NUM
MOV a, CX
;ввод n
LEA DX, msg_n
MOV AH, 9
INT 21h
call SCAN_NUM
MOV n, CX
MOV AX, 0
cmp AX, n
je then1
MOV AX, x
SUB AX, a
MOV yy, AX
MOV y, AX
main:
MOV AX, 1
cmp AX, n
je esc
MOV AX, yy
MUL y
MOV y, AX
MOV AX, n
SUB AX, 1
MOV n, AX
jmp main
then1:
MOV AX, 1
MOV y, AX
jmp esc
esc:
;Вывод результата
LEA DX, msg_y
MOV AH, 9
INT 21h
MOV AX, y
call PRINT_NUM
;exit to OS
MOV AH, 4Ch
INT 21h
DEFINE_SCAN_NUM
DEFINE_PRINT_STRING
DEFINE_PRINT_NUM
DEFINE_PRINT_NUM_UNS
DEFINE_PTHIS
ENDРешение задачи: «Привести блок-схему в соответствие с кодом»
textual
Листинг программы
mov ax,1 cwd jcxz @@02 mov bx,x sub bx,a mov y,bx @@01: cwd mul y loop @@01 @@02:
Объяснение кода листинга программы
- mov ax,1 — значение переменной ax становится равным 1.
- cwd — выполняет обращение слова (слово становится двойным).
- jcxz @@02 — если значение регистра cx равно нулю, то выполняется переход на метку @@02.
- mov bx,x — значение переменной bx становится равным значению переменной x.
- sub bx,a — значение переменной bx уменьшается на значение переменной a.
- mov y,bx — значение переменной y становится равным значению переменной bx.
- cwd — выполняет обращение слова (слово становится двойным).
- mul y — значение переменной y умножается на значение переменной ax.
- loop @@01 — выполняется переход на метку @@01.