Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаба №2 по ЭВМ .doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
125.95 Кб
Скачать

X sword ?

.CODE

Start: mov CX,D

add CX,8; CX:=D+8

mov BX,B

dec BX ; BX:=B-1

mov AX,A

add AX,B; AX:=A+B

imul BX ; DX:AX:=(A+B)*(B-1)

idiv CX ; AX:=(DX:AX):CX

mov X,AX

. . .

2.3. Организация ввода-вывода

Библиотека MASM32.lib содержит специальные подпрограммы ввода-вывода консольного режима:

1. Процедура ввода:

StdIn PROC lpszBuffer:DWORD, bLen:DWORD

Первый операнд – адрес буфера ввода, второй – размер буфера ввода (до 128 байт). В буфере ввода введенная строка завершается символом конца строки (13, 10).

2. Процедура замены символов конца строки нулем:

StripLF PROC lpszBuffer:DWORD ; буфер ввода

3. Функция преобразования завершающейся нулем строки в число:

atol proc lpszBuffer:DWORD ; результат – в EAX

Пример программирования ввода:

.DATA

zapros DB 'Input value:',13,10,0 ; запрос

buffer DB 10 dup ('0') ; буфер ввода

.CODE

. . .

Vvod: Invoke StdOut,addr zapros

Invoke StdIn,addr buffer,LengthOf buffer

Invoke StripLf,addr buffer

; Преобразование в SDWORD

Invoke atol,ADDR buffer ;результат в EAX

. . .

4. Процедура вывода завершающейся нулем строки в окно консоли:

StdOut PROC lpszBuffer:DWORD ; буфер вывода, зав. нулем

5. Процедура преобразования числа в строку:

dwtoa PROC public dwValue:DWORD, lpBuffer:PTR BYTE

Пример программирования вывода:

.DATA

result DWORD ? ; поле результата

string DB 13,10,'Result =' ; заголовок вывода

resstr DB 16 dup (?) ; выводимое число

.CODE

. . .

; Преобразование

Invoke dwtoa,result,ADDR resstr

; Вывод

Invoke StdOut,ADDR string

. . .

Версия программы раздела 3 с вводом-выводом:

; Template for console application

.586

.MODEL flat, stdcall

OPTION CASEMAP:NONE

Include kernel32.inc

Include masm32.inc

IncludeLib kernel32.lib

IncludeLib masm32.lib

.CONST

MsgExit DB 13,10,"Press Enter to Exit",0AH,0DH,0

.DATA

B SWORD -6

D SWORD 11

X SWORD ?

fX SWORD 0 ; старшее слово результата

Zapros DB 13,10,'Input A',13,10,0

Result DB 'Result='

ResStr DB 16 DUP (' '),0

.DATA?

A SWORD ?

fA SWORD ? ; старшее слово переменной A

Buffer DB 10 DUP (?)

inbuf DB 100 DUP (?)

.CODE

Start: Invoke StdOut,ADDR Zapros

Invoke StdIn,ADDR Buffer,LengthOf Buffer

Invoke StripLF,ADDR Buffer

; Преобразование в SDWORD

Invoke atol,ADDR Buffer ;результат в EAX

mov DWORD PTR A,EAX

; Вычисления

mov CX,D

add CX,8; CX:=D+8

mov BX,B

dec BX ; BX:=B-1

mov AX,A

add AX,B; AX:=A+B

imul BX ; DX:AX:=(A+B)*(B-1)

idiv CX ; AX:=(DX:AX):CX

mov X,AX

; Преобразование

Invoke dwtoa,X,ADDR ResStr

; Вывод

Invoke StdOut,ADDR Result

XOR EAX,EAX

Invoke StdOut,ADDR MsgExit

Invoke StdIn,ADDR inbuf,LengthOf inbuf

Invoke ExitProcess,0

End Start