Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.220.79.183] |
|
Сообщ.
#1
,
|
|
|
<br>.model tiny<br>.code<br>org(100h)<br>start:<br> mov ax,100<br> mov bx,5<br> div bx<br>ret<br>end start<br> Откомпильте эти нехитрые строчки у себя и объясните, пожалуйста, почему в отладчике всё нормально , а запуск программы прерывается сообщением: <br>Your program caused a divide overflow error.<br>If the problem persists, contact your program vendor<br> В чём тут проблема ? |
Сообщ.
#2
,
|
|
|
Потому что DIV с байтом делит слово AX на байт, а DIV со словом делит двойное слово DX:AX на это слово.... В отладчике у тебя наверняка DX=0 при запуске, а в жизни DX=PSP! Добавь XOR DX,DX перед тем, как делить и всё будет тип-топ....
|
Сообщ.
#3
,
|
|
|
И, кстати, если результат деления > 65535, то возникает ошибка, такая же, как и при делении на ноль!
|
Сообщ.
#4
,
|
|
|
Да... про DX я и не подумал, стормозил :(
<br>а в жизни DX=PSP! <br> Как так ??? |
Сообщ.
#5
,
|
|
|
.MODEL Tiny<br>.286<br>.CODE<br>ORG 100h<br><br>Start:<br><br> push ax<br><br> pushf<br> pop ax<br> int 29h<br> mov al,ah<br> int 29h<br><br> pop ax<br> int 29h<br> mov al,ah<br> int 29h<br><br> xchg ax,bx<br> int 29h<br> mov al,ah<br> int 29h<br><br> xchg ax,cx<br> int 29h<br> mov al,ah<br> int 29h<br><br> xchg ax,dx<br> int 29h<br> mov al,ah<br> int 29h<br><br> xchg ax,si<br> int 29h<br> mov al,ah<br> int 29h<br><br> xchg ax,di<br> int 29h<br> mov al,ah<br> int 29h<br><br> xchg ax,bp<br> int 29h<br> mov al,ah<br> int 29h<br><br> mov ax,sp<br> int 29h<br> mov al,ah<br> int 29h<br><br> mov ax,cs<br> int 29h<br> mov al,ah<br> int 29h<br><br> mov ah,9<br> lea dx,Msg<br> int 21h<br><br> int 20h<br><br>Msg DB 13,10,'FlAxBxCxDxSiDiBpSpCs$'<br><br>END Start Fl - это Flags |