int 21h
pop ax and al,0Fh cmp al,10 sbb al,69h das
mov dl,al mov ah,02 int 21h
; преобразуем число в bh в ASCII-код
mov al,bh push ax shr al,4 cmp al,10 sbb al,69h das
mov dl,al mov ah,02 int 21h
pop ax and al,0fh cmp al,10 sbb al,69h das
mov ah,02 mov dl,al int 21h jmp m3
m1:
;здесь оказываемся, если число в bh ИЛИ сx равно 0 ;настраиваем es на сегмент кода и начинаем считывать коды
команд ;заменяя нулевой элемент в регистре на не нулевой
push cs pop es cmp cx,0 jnz m01
mov cx, word ptr es:[si] m01:
cmp bh,0 jnz m02
mov bh, byte ptr es:[si] m02:
inc si jmp m2
;вычисляем выражение m3:
mov al,a cbw sub ax,c
mov si,ax
mov al, d cbw
xor ax,b
or si, ax; результат вычисления выражения будет в регистре si
Exit:
mov ax,4C00h int 21h
END Start
ЗАДАНИЕ №3
.386
.model flat,stdcall option casemap:none
include ..\INCLUDE\kernel32.inc include ..\INCLUDE\user32.inc includelib ..\LIB\kernel32.lib includelib ..\LIB\user32.lib BSIZE equ 15
.data
ifmt db "%d", 0 ;строка формата stdout dd ?
cWritten dd ?
CRLF WORD ?
.data?
buf db BSIZE dup(?) ;буфер
.code start:
invoke GetStdHandle, -11 mov stdout,eax
mov CRLF, 0d0ah
;-------------------------умножение mov bx, 4
mov ax, 3 mul bx
invoke wsprintf, ADDR buf, ADDR ifmt, eax
invoke WriteConsoleA, stdout, ADDR buf, BSIZE, ADDR cWritten, 0
invoke ExitProcess,0 end start
ЗАДАНИЕ №4
.386
.model flat,stdcall option casemap:none
include ..\INCLUDE\kernel32.inc include ..\INCLUDE\user32.inc includelib ..\LIB\kernel32.lib includelib ..\LIB\user32.lib BSIZE equ 15
.data
ifmt db "%d", 0 ;строка формата stdout dd ?
cWritten dd ?
CRLF WORD ?
.data?
buf db BSIZE dup(?) ;буфер
.code start:
invoke GetStdHandle, -11 mov stdout,eax
mov CRLF, 0d0ah
; |
-------------------------деление |
mov eax, 99 mov edx, 0 mov ebx, 3 div ebx
invoke wsprintf, ADDR buf, ADDR ifmt, eax
invoke WriteConsoleA, stdout, ADDR buf, BSIZE, ADDR cWritten, 0
invoke WriteConsoleA, stdout, ADDR CRLF, 2, ADDR cWritten,0
ЗАДАНИЕ №5
0000 |
CODE |
SEGMENT |
||||
|
ASSUME |
CS |
:CODE, |
DS |
:CODE |
|
0000 |
???? X |
|
DW |
? ; Память для переменных |
||
0002 |
???? A |
|
DW |
? |
|
|
0004 |
???? B |
|
DW |
? |
|
|
0006 |
???? C |
|
DW |
? |
|
|
0008 |
???? D |
|
DW |
? |
|
|
000A |
FIG4_16 PROC |
|
|
NEAR |
|
|
|
|||||||||||||||||||||
000A B8 0002MOV |
|
AX |
, 2 |
|
|
|
|
|
|
|
|
|
|
|
|
; Загрузка константы |
||||||||||||
000D F7 2E 0002 R |
IMUL |
|
|
|
|
A |
; DX:AX = A * 2 |
|||||||||||||||||||||
0011 |
8B DA |
|
MOV |
|
BX |
, |
|
|
DX |
|
|
|
|
|||||||||||||||
0013 |
8B C8 |
MOV |
CX |
, |
AX |
|
|
|
|
|
; BX:CX = A * 2 |
|||||||||||||||||
0015 |
A1 0004 R |
MOV |
|
AX |
, B |
|
||||||||||||||||||||||
0018 |
F7 2E 0006 R |
IMUL |
|
|
C |
; DX:AX = B * C |
||||||||||||||||||||||
001C 03 C1 |
ADD |
|
|
|
AX |
, |
CX |
|
|
|
|
|
||||||||||||||||
001E 13 D3 |
ADC |
|
|
|
DX |
, |
BX |
|
|
|
|
; DX:AX = A * 2 + B * C |
||||||||||||||||
0020 |
8B 0E 0008 R |
MOV |
|
|
|
CX |
, D |
|
||||||||||||||||||||
0024 |
83 E9 03 |
|
SUB |
|
|
|
CX |
, 3 |
|
|
; CX = D - 3 |
|||||||||||||||||
0027 |
F7 F9 |
IDIV |
|
|
CX |
|
|
; AX = (A*2 + B*C) / (D-3) |
||||||||||||||||||||
0029 |
A3 0000 R |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
X, |
|
|
|
; Сохранение |
|||||||
|
MOV |
|
|
AX |
|
|||||||||||||||||||||||
результата |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
002C C3 RET |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
002D |
FIG4_16 ENDP |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
002D |
CODE |
ENDS |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
END
ЗАДАНИЕ №6
.MODEL tiny
.STACK 100h
.CODE
mov ah,01101010b mov bl,10101100b mov ch,01011001b
or ah,bl not ch
xor ch,0F2h and ah,ch mov al,ah mov ah,4ch int 21h END
;Загрузка в регистр ah значения 6АН ;Загрузка в регистр bl значения ACH ;Загрузка в регистр ch значения 59Н
ЗАДАНИЕ №7
.MODEL SMALL
.STACK 100h
.DATA a db ? b db ? c db ? d db ? x dw ?
.CODE start:
mov ax, @data mov ds,ax mov a, 26 mov b, 63 mov c, 144 mov d, 48
end start
ЗАДАНИЕ №8
.MODEL tiny
.STACK l00h
.CODE
xor ax,ax ;Заносим в регистр АХ нулевое значение
mov es,ax ;Передаем это значение в сегментный регистр test byte ptr es:[417h],4 ;проверяем байт состояния клавиатуры если светодиод caps
;lock на клавиатуре светится (бит 2=1), то флаг Z будет равен 0 mov ah,0101b ;занесем в АН чередующуюся последовательность бит
test ah,l ;проследите изменение значение флага Z