Диапазон переменной - Assembler

Узнай цену своей работы

Формулировка задачи:

Имеется код
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
Нужно установить диапазон ввода h>0 , но <9.Как сделать?

Решение задачи: «Диапазон переменной»

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

Объяснение кода листинга программы

Непосредственно в коде встречается множество ошибок, которые не позволят выполнить данный код, но если их исправить, то общий порядок работы кода будет следующим:

  1. .model small include io.asm — это первые два строки кода, которые задают модель памяти и подключают файл с драйверами ввода-вывода.
  2. .stack .data — следующие две строки кода создают стек и область данных.
  3. msg DB 'Enter$' — далее задаётся строка сообщения, которая будет выводиться на экран.
  4. T DD ? H Dw ? M Dw ? sec Dw ? — затем создаются четыре переменные типа DWORD, в которые будут записываться символы.
  5. .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 — это часть кода, которая отвечает за ввод данных с клавиатуры, вывод сообщения и обработку полученных данных.
  6. mov ax, h; mov bx, 60; mul bx; add ax, m; mul bx; add ax, sec — эти строки выполняют математические операции над переменными h, m и sec.
  7. mov word ptr T, ax; mov word ptr T+2,bx — эти строки записывают результаты вычислений в переменные T и T+2.
  8. newline outch 'T='; outint — выводится строка сообщения с результатом вычислений.
  9. finish end start — завершающая часть кода, которая говорит о том, что программа заканчивает свою работу.

Оцени полезность:

9   голосов , оценка 4.111 из 5
Похожие ответы