0 / 0 / 2
Регистрация: 18.12.2012
Сообщений: 49
1

Вывести на экран десятичное значение их разности

16.03.2014, 20:12. Показов 1092. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
asm i8086

Ввести с клавиатуры два двузначных десятичных числа без знака X и Y(подряд без пробела). Вывести на экран десятичное значение их разности в виде "Z=X-Y".
Есть код, выполняющий задание. Делал из примера. Но нужно сделать так, что бы при условии, что первое число меньше второго, выводило отрицательный результат. Не знаю как это сделать.

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
DataS   SEGMENT     ;сегмент данных
        N       DW 4
        M       DW 4
        BUF     DB 6 DUP (?) ;буфер для ввода с клавиатуры
        BUF1    DB 4 DUP (?) ;буфер для вывода на экран
        BUF2    DB ' Z= '
INVITE  DB 'Введите подряд, без пробелов, два двузначных' 
DB 'числа (X,Y):',10, 13, '$'
        A       DB 10
DataS   ENDS
STSEG   SEGMENT STACK   ;сегмент стека
        DB 128   DUP (?)
STSEG   ENDS
CODSEG  SEGMENT ;сегмент кода
        ASSUME CS:CODSEG, DS:DataS, SS:STSEG
INPUT   PROC        ;подпрограмма ввода с клавиатуры
        MOV AH,3Fh
        MOV BX,00h  ; в BX - дескриптор ввода с клавиатуры
        MOV CX,N        ; в CX - число символов для введения
        LEA DX, BUF ; в DX - адрес буфера для ввода (BUF)
        INT 21h
        RET
INPUT   ENDP
OUTPUT  PROC
                     ; в DX - адрес буфера для вывода (BUF1)
        MOV AH,40h   ;подпрограмма вывода на экран
        MOV BX,01h  ; в BX - дескриптор вывода на экран
        MOV CX,M
        INT 21h
        RET
OUTPUT  ENDP
BEGIN:  MOV  AX, DataS      ;начальная загрузка регистра DS
        MOV  DS, AX
        CALL INPUT
        XOR AX,AX
        MOV  AL, BUF        ;AL -  ASCII-код старшей цифры 1-го числа
        MOV  BL, BUF+1  ;BL -  ASCII-код младшей цифры 1-го числа
        SUB  AL, '0'        ;выделение старшей цифры 1-го числа
        MUL  A          ;умножение её на 10
        SUB  BL, '0'        ;выделение младшей цифры 1-го числа
        ADD  AL, BL
        MOV  CL,AL      ;запись 1-го числа в регистр CL
        XOR  AX, AX
        MOV  AL, BUF+2  ;AL -  ASCII-код 1-ї цифры 2-го числа
        MOV  BL, BUF+3  ;BL -  ASCII-код 2-ї цифры 2-го числа
        SUB  AL,'0'         ;AL - первая цифра 2-го числа
        MUL  A          ; умножение на 10
        SUB  BL, '0'        ; BL -  друга цифра 2-го числа
        ADD  AL,BL      ; AL - 2-е число
        SUB  CL,AL      ; разность двух чисел
        XOR  AX,AX      ;обнуление AX
        MOV  AL,CL
        DIV  A          ;выделение  цифр результату
        ADD  AL,'0'     ; AL -  ASCII-код старшей цифры
        MOV  BUF1,AL
        ADD  AH,'0'     ;AH -  ASCII-код младшей цифры
        MOV  BUF1+1,AH
        LEA  DX,BUF2
        CALL OUTPUT     ;выведение 'Z = '
        LEA  DX,BUF1
        CALL OUTPUT
        MOV  AX,4C00h       ;выход в DOS
        INT 21h
CODSEG  ENDS
        END  BEGIN
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.03.2014, 20:12
Ответы с готовыми решениями:

Вывести на экран десятичное значение функции
Ввести с клавиатуры двознакови числа без знака Х1, Х2, Х3, Х4. Вывести на экран десятичное значение...

Вывести на экран результат целочисленного деления разности параметров a и b на значение наибольшего из них
Найти разность значений параметров a и b. Если она > 0, на экран монитора вывести результат...

Найти и вывести на экран значение разности между максимальным и минимальным значениями функции F(x)=lg|sin x * cos(x+5)|
Найти и вывести на экран значение разности между максимальным и минимальным значениями функции...

Как вывести десятичное число на экран калькулятора
Доброго времени суток. Я начинающий программист. Вопрос таков. Составил код к калькулятору в Xcode,...

2
Клюг
7674 / 3189 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
17.03.2014, 12:43 2
Цитата Сообщение от Кригель Посмотреть сообщение
Не знаю как это сделать.
Дык, всё просто:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
.model small
.data
        N       DW 4
        M       DW 4
        BUF     DB 6 DUP (?) ;буфер для ввода с клавиатуры
        BUF1    DB 4 DUP (?) ;буфер для вывода на экран
        BUF2    DB ' Z= '
INVITE  DB 'Введите подряд, без пробелов, два двузначных' 
DB 'числа (X,Y):',10, 13, '$'
        A       DB 10
.stack 128
.code   ;сегмент кода
INPUT   PROC        ;подпрограмма ввода с клавиатуры
        MOV AH,3Fh
        MOV BX,00h  ; в BX - дескриптор ввода с клавиатуры
        MOV CX,N        ; в CX - число символов для введения
        LEA DX, BUF ; в DX - адрес буфера для ввода (BUF)
        INT 21h
        RET
INPUT   ENDP
OUTPUT  PROC
                     ; в DX - адрес буфера для вывода (BUF1)
        MOV AH,40h   ;подпрограмма вывода на экран
        MOV BX,01h  ; в BX - дескриптор вывода на экран
        MOV CX,M
        INT 21h
        RET
OUTPUT  ENDP
BEGIN:  MOV  AX, @data      ;начальная загрузка регистра DS
        MOV  DS, AX
        CALL INPUT
        XOR AX,AX
        MOV  AL, BUF        ;AL -  ASCII-код старшей цифры 1-го числа
        MOV  BL, BUF+1  ;BL -  ASCII-код младшей цифры 1-го числа
        SUB  AL, '0'        ;выделение старшей цифры 1-го числа
        MUL  A          ;умножение её на 10
        SUB  BL, '0'        ;выделение младшей цифры 1-го числа
        ADD  AL, BL
        MOV  CL,AL      ;запись 1-го числа в регистр CL
        XOR  AX, AX
        MOV  AL, BUF+2  ;AL -  ASCII-код 1-ї цифры 2-го числа
        MOV  BL, BUF+3  ;BL -  ASCII-код 2-ї цифры 2-го числа
        SUB  AL,'0'         ;AL - первая цифра 2-го числа
        MUL  A          ; умножение на 10
        SUB  BL, '0'        ; BL -  друга цифра 2-го числа
        ADD  AL,BL      ; AL - 2-е число
        SUB  CL,AL      ; разность двух чисел
; KL+
        push    cx
        LEA  DX,BUF2
        CALL OUTPUT     ;выведение 'Z = '
        pop cx
        cmp cl,80h
        jb  pos
        mov al, '-'
        int 29h
        neg cl
pos:    mov al, cl
    aam     ; делим AL на 10.:AH - десятки, AL - единицы
    add ax, '00'; в ASCII
    xchg    ah, al
    int 29h ; выводим десятки
    xchg    ah, al
    int 29h ; выводим единицы
;KL-
        MOV  AX,4C00h       ;выход в DOS
        INT 21h
 
        END  BEGIN
1
0 / 0 / 2
Регистрация: 18.12.2012
Сообщений: 49
17.03.2014, 23:50  [ТС] 3
Все отлично работает, буду разбирать.
Благодарю)
0
17.03.2014, 23:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.03.2014, 23:50
Помогаю со студенческими работами здесь

Шестнадцатиричное число перевести в десятичное и вывести на экран
1)Шестнадцатиричное число перевести в десятичное и вывести на экран. (Писать надо на С.) Я пытался...

Вычислить и вывести соответствующее десятичное значение для всех строк матрицы
Матрица B (k, m) состоит из нулей и единиц. Считая каждую строку матрицы побитовым записи двоичного...

Заданы два множества. Вывести на экран результат объединения и разности этих множеств
Задача должна быть решена с использованием типа данных Множество. Заданы два множества....

Вывести на экран номер и значение элементов массива, абсолютное значение которых < 15
Сделайте задачу про массивы, по блок-схеме


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru