Диапазон переменной - Assembler
Формулировка задачи:
Имеется код
Нужно установить диапазон ввода h>0 , но <9.Как сделать?
include io.asm S segment stack DB 256 dup(?) S ends D segment msg DB 'Enter$' T DD ? H Dw ? M Dw ? sec Dw ? D ends c segment assume CS:C, DS:D, SS:S start: mov ax, D mov DS, ax mov DX, offset msg outstr outch 'H' outch '>' inint h outstr outch 'M' outch '>' inint m outstr outch 's' outch 'e' outch 'c' outch '>' inint sec mov ax, h mov bx, 60 mul bx add ax, m mul bx add ax, sec mov word ptr T, ax mov word ptr T+2,bx newline outch 'T' outch '=' outint <word ptr T> finish c ends end start
Решение задачи: «Диапазон переменной»
textual
Листинг программы
.model small include io.asm .stack .data msg DB 'Enter$' T DD ? H Dw ? M Dw ? sec Dw ? .code start: mov ax, @data mov DS, ax mov DX, offset msg outstr outch 'H' outch '>' @@: xor ax, ax int 16h sub al, 30h js @B cmp al, 9 ja @B cbw mov H, ax or al,30h int 29h newline outstr outch 'M' outch '>' inint m outstr outch 's' outch 'e' outch 'c' outch '>' inint sec mov ax, h mov bx, 60 mul bx add ax, m mul bx add ax, sec mov word ptr T, ax mov word ptr T+2,bx newline outch 'T' outch '=' outint <word ptr T> finish end start
Объяснение кода листинга программы
Непосредственно в коде встречается множество ошибок, которые не позволят выполнить данный код, но если их исправить, то общий порядок работы кода будет следующим:
- .model small include io.asm — это первые два строки кода, которые задают модель памяти и подключают файл с драйверами ввода-вывода.
- .stack .data — следующие две строки кода создают стек и область данных.
- msg DB 'Enter$' — далее задаётся строка сообщения, которая будет выводиться на экран.
- T DD ? H Dw ? M Dw ? sec Dw ? — затем создаются четыре переменные типа DWORD, в которые будут записываться символы.
- .code start: mov ax, @data mov DS, ax mov DX, offset msg outstr outch 'H>' inint m outstr outch 'M>' outch 's' outch 'e' outch 'c>' inint sec mov ax, h mov bx, 60 mul bx add ax, m mul bx add ax, sec mov word ptr T, ax mov word ptr T+2,bx newline outch 'T=' outint
finish end start — это часть кода, которая отвечает за ввод данных с клавиатуры, вывод сообщения и обработку полученных данных. - mov ax, h; mov bx, 60; mul bx; add ax, m; mul bx; add ax, sec — эти строки выполняют математические операции над переменными h, m и sec.
- mov word ptr T, ax; mov word ptr T+2,bx — эти строки записывают результаты вычислений в переменные T и T+2.
- newline outch 'T='; outint
— выводится строка сообщения с результатом вычислений. - finish end start — завершающая часть кода, которая говорит о том, что программа заканчивает свою работу.