Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.11.2013, 00:26   #1
camel5
Пользователь
 
Аватар для camel5
 
Регистрация: 10.11.2013
Сообщений: 28
По умолчанию Механизм ввода/вывода

Возникли сомнения в правильности написания процедуры ввода и вывода:
1)Даны два числа размером в слово. Найти максимальное из них.
Код:
.model small
.stack 100h
.data
X DW 3500h
Y DW 4000h
BUF1 DW 80 DUP(' ')
Z DB ?
.code
START:       MOV AX, @data
             MOV DS, AX
	
             MOV DX, OFFSET BUF1
             MOV AH,08H                 ; ВВОДИТ СИМВОЛЫ НЕ ВЫВОДИТ НА ЭКРАН
             INT 21
             MOV AX, X
             CMP AX, Y	                ;x=y?
             JGE  M1	                ;x>=y -> M
             MOV   AX, Y
M1:          MOV Z, AX 
           
             mov dh, z
             mov ah,02 
             int 21h 
             mov dl,dh 
             int 21h
END START
2)вычисление факториала
Код:
model small
.stack 100h
.data
N     DW 1121h
digit DW ?
.code
START:mov ax, @data
      mov ds, ax
	  mov ax, N
	  mov cx, [digit]
m1:   mul cx
      dec cx
	  cmp cx, N
	  jne m1
	  mov ax, N
	  mov cx, [digit]
      mul ax
      loop m1
	  int 21h 
	  ret
	  mov ah, 09h
	  lea dx, digit
	  MOV AX, 4C00H
      INT 21H
END START
3)Сравнить два числа X и Y. Если они равны, вывести на экран строку ‘X=Y’, иначе – ‘X <>Y’.
Код:
model small
.stack 100h
.data
  X dw 1214h
  Y dw  2346h
  equal db "X = Y$"
  not_equal db "X<>Y$"
.code
START:mov ax, @data
      mov ds, ax
      mov ax,X
      cmp ax,Y
      jz a1
      mov dx,offset not_equal
      jmp a2
      a1: mov dx,offset equal
      a2: mov ah,9
      int 21h
      mov ah, 09h       
      lea dx,  equal
      int 21h  
	  ;---Выход из программы:
      mov ax,4c00h      
      int 21h
 END START
4.Дано десятичное число N. Подсчитать количество цифр в числе.
Код:
MODEL SMALL
.stack 100h
.data
     Number    DW    15678    ; 2-байтовое число
     C         DB     ?       ; кол-во цифр
     D         DW    10       ; делитель 
.code 
START:  MOV AX,@DATA       
        MOV DS,AX

		mov ah, 08h
		int 21h
        MOV  AX,  Number          ; требование команды DIV (делимое должно быть в AX) 

@@:      NEG  AX                  ; ПОЛУЧЕНИЕ НЕОТРИЦАТЕЛЬНОГО ЧИСЛА
         JS    @@  
         MOV  BL, 1               ; цифры будут считаться  в ВL (как минимум одна цифра есть)

                                  ; делим число на 10 до тех пор,  пока данное число не станет < 10
WHILE1: CMP  AX, 10               ; если число стало < 10,  то выйти из цикла
        JB     ENDWHILE1      
        XOR   DX,  DX              ; обнулить DX (так как DIV делит пару DX: AX на 2-байтовое числo D )     
        INC  BL                    ; увеличение счетчика цифр
        DIV  D                     ; разделить число на 10              
        JMP   WHILE1
ENDWHILE1:MOV C,  BL               ; записать ответ в однобайтовую ячейку памяти
          mov dl,  BL
          or  DL,  30h
          mov ah,  2
          int 21h
		  ;последние изменения
		  mov ah, 09h
		  lea dx, C
          MOV AX, 4C00H
          INT 21H
END START
camel5 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Форма ввода/вывода ashot-nnov Microsoft Office Access 3 23.08.2013 09:38
с++ Операторы ввода,вывода _yaroslav_ Помощь студентам 0 29.04.2013 21:55
с++ Операторы ввода,вывода _yaroslav_ Общие вопросы C/C++ 0 29.04.2013 02:26
Написать рекурсивную процедуру для ввода с клавиатуры последовательности чи-сел (конец ввода – 0) и вывода её на экран в обратном netiv Паскаль, Turbo Pascal, PascalABC.NET 1 17.02.2012 18:14
Перенаправление ввода/вывода dudeboy Win Api 0 16.11.2009 11:36