Читайте также: |
|
Додавання 4-ох байтних чисел
.model small
.data
A4 dd 87654321H
B4 dd 89ABCDEFH
R4 dq 0; можна і R4 db 0,0,0,0,0,0 і R4 dw 0,0,0 і R4 dd 0,0
.code
start:
; підрівняти сегмент даних під 0
mov ax,@data
mov ds,ax
; розмістити молодші слова операндів А4 і В4 в регістрах ax, dx
mov ax, word ptr A4
mov dx, word ptr B4
; перша операція додавання (без врахування переносу) реалізується інструкцією add
; це необхідно, оскільки попередні операції могли встановити прапорець переносу (С=1)
add ax,dx; ax = ax + dx (результат 1110H, C=1)
; зберегти результат в молодшому слові R4
mov word ptr R4,ax
; розмістити старші слова операндів А4 і В4 в регістрах ax, dx
mov ax, word ptr [A4+2]
mov dx, word ptr [B4+2]
; подальші операції додавання (з врахуванням переносу) реалізуються інструкцією adc:
adc ax,dx; правильно: ax = ax + dx + С (результат 1111H, C=1)
; add ax,dx; НЕправильно: ax = ax + dx (результат 1110H, C=1)
; зберегти результат в старшому слові R4
mov word ptr [R4+2], ax
; контрольне додавання на випадок виникнення переносу при останньому додаванні
mov ax,0
adc ax,0; ax = ax + 0 + С (результат 0001H, C=0)
; зберегти результат в найстаршому слові R4
mov word ptr [R4+4], ax
; завершення програми
mov ah,4CH
int 21
end start
end
Віднімання 4-ох байтних чисел
.model small
.data
A4 dd 87654321H
B4 dd 89ABCDEFH
R4 dq 0; можна і R4 db 0,0,0,0,0,0 і R4 dw 0,0,0 і R4 dd 0,0
.code
start:
; підрівняти сегмент даних під 0
mov ax,@data
mov ds,ax
; розмістити молодші слова операндів А4 і В4 в регістрах ax, dx
mov ax, word ptr A4
mov dx, word ptr B4
; перша операція віднімання (без врахування запозичення) реалізується інструкцією sub
; це необхідно, оскільки попередні операції могли встановити прапорець переносу (С=1)
sub ax,dx; ax = ax - dx (результат 7532H, C =1)
; зберегти результат в молодшому слові R4
mov word ptr R4,ax
; розмістити старші слова операндів А4 і В4 в регістрах ax, dx
mov ax, word ptr [A4+2]
mov dx, word ptr [B4+2]
; подальші операції віднімання (з врахуванням запозичення) реалізуються інструкцією sbb:
sbb ax,dx; правильно: ax = ax - dx - С (результат FDB9H, C=1)
;sub ax,dx; НЕправильно: ax = ax - dx (результат FDBAH, C=1)
; зберегти результат в старшому слові R4
mov word ptr [R4+2], ax
; контрольне віднімання на випадок виникнення переносу при останньому відніманні
mov ax,0
sbb ax,0; ax = ax - 0 - С (результат FFFFH, C=0)
; зберегти результат в найстаршому слові R4
mov word ptr [R4+4], ax
; завершення програми
mov ah,4CH
int 21
end start
end
Беззнакове множення 2 байти * 2 байти = 4 байти
.model small
.data
A2 dw 8808H
B2 dw 2
R4 dd 0
.code
start:
; підрівняти сегмент даних під 0
mov ax,@data
mov ds,ax
; розмістити слово операнду А2 в регістрі ax
mov ax, A2
; операція множення реалізується інструкцією mul
mul B2; ax = 1010, dx = 01
; зберегти результат в молодшому слові R4
mov word ptr R4,ax
; зберегти результат в старшому слові R4
mov word ptr [R4+2], dx
; завершення програми
mov ah,4CH
int 21
end start
end
Знакове множення 2 байти * 2 байти = 4 байти
.model small
.data
A2 dw 120; (78h)
B2 dw -2; (FFFEh)
R4 dd 0
.code
start:
; підрівняти сегмент даних під 0
mov ax,@data
mov ds,ax
; розмістити слово операнду А2 в регістрі ax
mov ax, A2
; операція множення реалізується інструкцією imul
imul B2;ax = FF10, dx = FFFF
;mul B2;ax = FF10, dx = 0077
; зберегти результат в молодшому слові R4
mov word ptr R4,ax
; зберегти результат в старшому слові R4
mov word ptr [R4+2], dx
; завершення програми
mov ah,4CH
int 21
end start
end
Беззнакове множення 4 байти * 2 байти = 8 байт
.model small
.data
A4 dd 0FFFFFFFFH
B2 dw 0FFFFH
R8 dq 0
.code
start:
; підрівняти сегмент даних під 0
mov ax,@data
mov ds,ax
; розмістити молодше слово операнду А4 в регістрі ax
mov ax, word ptr A4
; операція множення реалізується інструкцією mul
mul B2; ax =1, dx = FFFE
; зберегти результат в молодшому слові R8
mov word ptr R8,ax
; зберегти результат в 2-му слові R8
mov word ptr [R8+2], dx
; розмістити старше слово операнду А4 в регістрі ax
mov ax, word ptr [A4+2]
; операція множення реалізується інструкцією mul
mul B2; ax =1, dx = FFFE
; додати без врахування переносу ax і друге слово результату R8
add ax, word ptr [R8+2]; ax = 1 + FFFE = FFFF
; зберегти результат в 2-му слові R8
mov word ptr [R8+2],ax
; додати з врахуванням переносу dx і 0
adc dx, 0; dx = FFFE + 0 + C = FFFE
; зберегти результат в 3-му слові R8
mov word ptr [R8+4],dx
; завершення програми
mov ah,4CH
int 21
end start
end
Беззнакове ділення 2 байти / 1 байт = 1 байт
.model small
.data
A2 dw 0085H
B1 db 2
R1 db 0
.code
start:
; підрівняти сегмент даних під 0
mov ax,@data
mov ds,ax
; розмістити слово операнду А2 в регістрі ax
mov ax, A2
; операція ділення реалізується інструкцією div
; якщо B1 ≤ ah, то генерується помилка (0888Н/2 = помилка)
div B1; al = 42 - частка, ah = 01 - остача
; зберегти частку в R1
mov R1,al
; завершення програми
mov ah,4CH
int 21
end start
end
Знакове ділення 4 байти / 2 байти = 2 байти
.model small
.data
A4 dd 8883H
B2 dw -2; (FFFEh)
R2 dw 0
.code
start:
; підрівняти сегмент даних під 0
mov ax,@data
mov ds,ax
; розмістити молодше слово операнду А4 в регістрі ax
mov ax, word ptr A4
; розмістити старше слово операнду А4 в регістрі dx
mov dx, word ptr [A4+2]
; операція ділення реалізується інструкцією idiv
; якщо B2≤dx, то генерується помилка (78888888Н/2 = помилка)
idiv B2;ax = BBBFH, dx = 1H
;div B2;ax = 0000H, dx = 8883H
; зберегти частку в R2
mov R2,ax
; завершення програми
mov ah,4CH
int 21
end start
end
Дата добавления: 2015-10-29; просмотров: 172 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
День – Мехико – Дом-музей Фриды Кало и Дом-музей Троцкого – Taскo – Акапулько | | | Куплет: Reef The Lost Cauze |