Материал: 775

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

mul bx ; результат (произведение) возвращается в (dx:ax) ret

submul endp codesg ends

end submul

==================================================================

 

Пример 2.2

;lb2_1pr2.asm

ред. 11_02_06

stacksg segment para ‘Stack’

 

db 100h dup (?)

 

stacksg ends

datasg segment para ‘Data’

;*************************************************************************** soob db 'текст для выдачи из модуля 2_2 (текст расположен в модуле 2_1)','$'

*

;*************************************************************************** datasg ends

codesg segment para ‘Code’

;******************************

extrn myproc:proc

*

public soob

*

;******************************

begin:

mov ax,datasg mov ds,ax

;************************************************************************

;в регистре ax по-прежнему начало сегмента данных (передается в модуль 2_2)

*

; если же нет, то его надо загрузить:

mov ax, <адрес начала сегмента>

*

; т.е. в нашем случае надо: mov ax,datasg

*

;************************************************************************ call near ptr myproc ; вызов процедуры, расположенной в модуде 2_2

mov ax,4c00h ; завершение программы 2_1

int 21h

 

 

 

codesg ends

 

 

 

end begin

 

 

 

;--------------------------------------------------------------------------------------------------------------

 

 

 

;lb2_2pr2.asm

 

ред. 11_02_06

 

codesg segment para ‘Code’

 

 

;************************************

 

public myproc

*

 

extrn soob:byte

*

 

;************************************

 

myproc proc near

 

 

 

mov ds, ax ; восстановление регистра ds

(нужно, чтобы правильно

;

указывать начало сегмента данных, в котором находится soob)*

mov ah,09h

 

 

 

lea dx,ds:soob

 

 

 

 

 

61

 

int 21h ret

myproc endp codesg ends end

==================================================================

Пример 2.3

; lab2and.asm EXE-программа для демонстрации операции "логическое И"

;(работает с МП 8086)

;Компиляция: tasm.exe lab2and.asm ; tlink.exe lab2and.obj

;–сегмент стека-----------------------------------

stacksg segment para 'Stack' db 128 dup (?)

stacksg ends

; --------------------------------------------

datasg segment para 'Data' soob1 db 'Привет!',0dh,0ah,'$'

;

 

 

soob2

db '1234',0ah,0dh,'$'

b1

db '4'

;34h или 0011 0100

b2

db '7'

;37h или 0011 0111

;b3

db 3

; в примере

;w1

dw 64

; не используются

datasg ends

;---------------------------------------------------

codesg segment para 'Code'

assume cs:codesg,ds:datasg,ss:stacksg main proc far

push ds xor ax,ax push ax

mov ax,datasg mov ds,ax

;"логическое И" (у=х1 and x2)

;___/____/____

 

;

х1

х2

у

 

;

0

0

0

 

;

0

1

0

 

;

1

0

0

 

;

1

1

1

 

;

 

mov bl,b1

; bl := b1

 

 

;

 

and bl,b2

; bl := b1 and b2

 

 

 

 

62

;

0 0 1 1

0 1 0

0

это b1

в двоичном виде

;

0 0 1 1

0 1 1

1

то b2

в двоичном виде

;

| | | |

| | |

|

 

 

;v v v v v v v v

;0 0 1 1 0 1 0 0 результат побитового выполнения операции «логическое И»

 

mov soob2+2,bl

; soob2 := soob2 & bl

 

mov ah,09

 

; вывод сообщения "Привет!"

 

lea dx, soob1

 

 

 

int 21h

 

 

 

mov ah,09

 

; вывод сообщения soob2 с результатом

 

lea dx, soob2

 

; на месте цифры 3

;

int 21h

; т.е. должно быть: 1244

 

 

 

; если применить команды:

 

;

mov bl,b1

 

; bl := b1

;

and bl,b2

 

; bl := b1 and b2

;

mov soob2+0,bl

; soob2 := soob2 & bl

;то будет вывод сообщения soob2 с результатом

;на месте цифры 1

;т.е. должно быть: 4234

mov ah,0

 

int 16h

 

ret

;вернуться в DOS

main endp codesg ends

end main

==================================================================

Пример 2.4

;lab2or.asm EXE-программа для демонстрации операции "логическое ИЛИ"

;(работает с МП 8086)

;Компиляция: tasm.exe lab2or.asm ; tlink.exe lab2or.obj stacksg segment para 'Stack'

db 128 dup (?) stacksg ends

datasg segment para 'Data' soob1 db 'Привет!',0dh,0ah,'$'

;

 

 

soob2

db '1234',0ah,0dh,'$'

b1

db '1'

;31h или 0011 0001

b2

db '2'

;32h или 0011 0010

;b3

db 3

; в примере

;w1

dw 64

; не используются

63

datasg ends

codesg segment para 'Code'

assume cs:codesg,ds:datasg,ss:stacksg main proc far

push ds xor ax,ax push ax

mov ax,datasg mov ds,ax

;---------------------------------------------------

;логическое "или" (у=х1 or x2)

;x1

;____/____

; ____|

|____ y

;|____/____|

;x2

;

 

 

у

 

 

 

;

х1

х2

 

 

 

;

0

0

0

 

 

 

;

0

1

1

 

 

 

;

1

0

1

 

 

 

;

1

1

1

 

 

 

;

 

 

 

 

 

 

;

реализация:

 

 

 

 

 

mov bl,b1

; bl := b1

;

 

or

bl,b2

 

; bl := b1 or b2

 

0 0 1 1

0 0 0 1

 

 

;

 

это b1

в двоичном виде

;

 

0 0 1 1

0 0 1 0

это b2

в двоичном виде

;

 

| |

| |

| | | |

 

 

;

 

v v v v

v v v v

 

 

;

 

0 0 1 1

0 0 1 1

результат выполнения операции «логическое ИЛИ»

 

 

mov soob2+1,bl

; soob2 := soob2 & bl

 

 

mov ah,09

; вывод сообщения "Привет!"

 

 

lea dx, soob1

 

 

 

 

int 21h

 

 

 

 

 

mov ah,09

; вывод сообщения soob2 с результатом

 

 

lea dx, soob2

; на месте цифры 2

 

 

int 21h

; т.е. должно быть: 1334

 

 

mov ah,0

 

 

 

 

int 16h

 

 

 

 

 

ret

 

 

;вернуться в DOS

main

endp

 

 

 

codesg ends

 

 

 

 

 

end main

 

 

Пример 2.5

64

;lab2xor.asm EXE-программа демонстрации операции "исключающее ИЛИ" ;Компиляция: tasm.exe lab2xor.asm

; tlink.exe lab2xor.obj stacksg segment para 'Stack'

db 128 dup (?) stacksg ends

; ---------------------------------------------------

datasg segment para 'Data' soob1 db 'Привет!',0dh,0ah,'$'

;

soob2

db '1234',0ah,0dh,'$'

b1

db '3' ;33h или 0011 0011

b2

db 5

;05h или 0000 0101

;b3

db 3

; в примере

;w1

dw 64

; не используются

datasg ends

; ---------------------------------------------------

codesg segment para 'Code'

assume cs:codesg,ds:datasg,ss:stacksg main proc far

push ds xor ax,ax push ax

mov ax,datasg mov ds,ax

; ---------------------------------------------------

;

;логическое "исключающее ИЛИ"

;( по-другому называется "сложение по модулю два")

;

х1

+

х2

=

у

;

 

mod2

 

 

;

0

+

0

=

0

;

;

 

mod2

 

 

;

0

+

1

=

1

;

;

 

mod2

 

 

;

1

+

0

=

1

;

;

 

mod2

 

 

;

 

 

 

 

 

;

1

+

1

=

0 (получающаяся единица переноса

;

 

mod2

 

в старший разряд отбрасывается)

;

х1

х2

у

 

 

;

 

 

;

0

0

0

 

 

 

 

 

 

 

65

Источник: https://studfile.net/preview/16406832/