; генерация ядовито-зелёной градиентной палитры
mov dx,3C8h
xor ax,ax
out dx,al
inc dx
xchg ax,cx
genpal:
mov al,cl
shr al,4
out dx,al
mov al,cl
shr al,2
out dx,al
mov al,0
out dx,al
inc cl
jnz genpal
obj->ShowID(); // Думал напишу obj[Тут номер обьэкта] и будет работать но нет...
obj[N].ShowID();
a[b]
эквивалентна записи *(a + b)
.Test *obj2= obj + sizeof (Test); objN= obj + (sizeof (Test) * N) ;
obj2 = obj + 1; objN = obj + N;
#include <iostream>
#include <conio.h>
using namespace std;
int i1 = 0;
class Test
{
int _id;
public:
Test(int id = i1++):_id(id)
{
cout << "Create Object: " << this << " _id: " << _id << endl;
}
~Test()
{
cout << "Delete Object: " << this << " _id: " << _id << endl;
if(i1) i1--;
}
void ShowID()
{
cout << "ShowID() " << this << " _id: " << _id << endl;
}
};
int main()
{
long int num;
cin >> num;
cout << endl;
Test *obj= new Test[num];
for(int i=0; i < num; ++i)
{
obj[i].ShowID();
}
delete[] obj;
_getch();
return 0;
}
MOV DX, 2000 ; Number of times to repeat whole routine.
MOV BX, 1 ; Frequency value.
MOV AL, 10110110B ; The Magic Number (use this binary number only)
OUT 43H, AL ; Send it to the initializing port 43H Timer 2.
NEXT_FREQUENCY: ; This is were we will jump back to 2000 times.
MOV AX, BX ; Move our Frequency value into AX.
OUT 42H, AL ; Send LSB to port 42H.
MOV AL, AH ; Move MSB into AL
OUT 42H, AL ; Send MSB to port 42H.
IN AL, 61H ; Get current value of port 61H.
OR AL, 00000011B ; OR AL to this value, forcing first two bits high.
OUT 61H, AL ; Copy it to port 61H of the PPI Chip
; to turn ON the speaker.
MOV CX, 100 ; Repeat loop 100 times
DELAY_LOOP: ; Here is where we loop back too.
LOOP DELAY_LOOP ; Jump repeatedly to DELAY_LOOP until CX = 0
INC BX ; Incrementing the value of BX lowers
; the frequency each time we repeat the
; whole routine
DEC DX ; Decrement repeat routine count
CMP DX, 0 ; Is DX (repeat count) = to 0
JNZ NEXT_FREQUENCY ; If not jump to NEXT_FREQUENCY
; and do whole routine again.
; Else DX = 0 time to turn speaker OFF
IN AL, 61H ; Get current value of port 61H.
AND AL, 11111100B ; AND AL to this value, forcing first two bits low.
OUT 61H, AL ; Copy it to port 61H of the PPI Chip
; to turn OFF the speaker.
Когда байт по адресу RCX равен нулю и программа достигает строки `je ..@15.endwhile`, инструкция JE просто не перескакивает на метку `..@15.endwhile`.
Почему?
cmp [rcx], dword 0
-- это вообще странная запись. Канонично было бы написать cmp dword ptr [rcx], 0
. Но в любом случае, вы не "байт по адресу RCX" сравниваете с 0, а целое слово. Ну и между строчками ok и err нет целого слова нулей, но вот после err, очевидно, есть.cmp byte ptr [rcx], 0