КК
Кристина Косинова

Помогите с расширением знака в ассемблере

дан такой пример F=87935-(588+10+20)+30+12
программа не работает, т. к. ошибка в значении 87935, регистр в который мы записываем значение нужно расширить, а как именно я не понимаю, сказали что нужно использовать комманду cbw
вот код:
; F=87935-(588+10+20)+30+12
masm
model small
.stack 100h
.data
.code
start:
mov ax, @data
mov ds, ax
mov ax, 588
mov cx, 10
mov bx, 0900h
mov [bx], cx
add ax, cx
mov cx, 20
mov bx, 0902h
mov [bx], cx
add ax, cx
mov cx, 30
mov bx, 0904h
mov [bx], cx
add ax, cx
add ax, 12
mov bx,ax
mov ax, 87935
cbw
sub ax, bx
mov cx, ax
mov bx, 1000h
mov [bx], cx
mov ax,4c00h
int 21h

end start

Юрий Сунцов
Юрий Сунцов

> Если кодишь под 32-битную систему
Нет, Mephi, это не 32-разрядная программа, т. к. указана model small.

> сказали что нужно использовать комманду cbw
В данном случае нужно использовать cwd.

masm
model small
.stack 100h
.data
BigNumber dd 87935
F dd ?
.code
start:
mov ax, @data
mov ds, ax
mov ax, 588
add ax, 10
add ax, 20
add ax, 30
add ax, 12
cwd
mov bx, word ptr BigNumber
sub bx, ax
mov word ptr F, bx
mov bx, word ptr BigNumber + 2
sbb bx, dx
mov word ptr F + 2, bx
mov ax,4c00h
int 21h
end start

Хотя, никто не запрещает в 16-разрядных приложениях использовать 32-разрядные регистры, если ваш процессор не старее i80386.

model small
.stack 100h
.data
F dd ?
.code
.386
start:
mov ax, @data
mov ds, ax
mov ax, 588
add ax, 10
add ax, 20
add ax, 30
add ax, 12
movsx eax,ax
mov ebx, 87935
sub ebx, eax
mov F, ebx
mov ax,4c00h
int 21h
end start

В обеих программах получится одинаковый результат.

Алексей Сковпешков
Алексей Сковпешков

Ты используешь регистры ax, bx, cx, dx, а они все 16-битные. Если кодишь под 32-битную систему, то используй вместо них eax, ebx, ecx, и edx соответственно, тогда все будет влазить.

Похожие вопросы
Ассемблер. помогите решить!!!
Люди, помогите с Ассемблером!!!
Помогите с ассемблером
Помогите, что не так? прога в ассемблере
Помогите решить задачу по ассемблеру
помогите написать программу в с++ или на ассемблере
Помогите на ассемблера надо сделать задачу.
Ассемблер
Помогите по ассемблеру
Помогите с ассемблером