char far *vidmem = (char far *) 0x0B800; // Начальный адрес нулевой страницы видео буфера.Никак не понимаю,
1. как дать смещение указателю допустим 10
2. как записать в ячейку памяти на которую будет указывать указатель после смещения, допустим 67h ???
> char far *vidmem = (char far *) 0x0B800; // Начальный адрес нулевой
> страницы видео буфера.
> Никак не понимаю,
> 1. как дать смещение указателю допустим 10
> 2. как записать в ячейку памяти на которую будет указывать указатель после
> смещения, допустим 67h ???xoxottabych via https://www.youtube.com/results?search_query=ghjuhfvvbhjdfybt+c
Ну тож правильно,
> char far *vidmem = (char far *) 0x0B800; // Начальный адрес нулевой
> страницы видео буфера.
> Никак не понимаю,
> 1. как дать смещение указателю допустим 10
> 2. как записать в ячейку памяти на которую будет указывать указатель после
> смещения, допустим 67h ???vidmem[10] = 0x67;
>> char far *vidmem = (char far *) 0x0B800; // Начальный адрес нулевой
>> страницы видео буфера.
>> Никак не понимаю,
>> 1. как дать смещение указателю допустим 10
>> 2. как записать в ячейку памяти на которую будет указывать указатель после
>> смещения, допустим 67h ???
> vidmem[10] = 0x67;Ок , по синтаксису обращение как к массиву ...
char far *vidmem = (char far *) 0x0B800;
void main()
{
vidmem[10] = 0x67;
}Вроде правильно, и компилятор ошибок не выдаёт, но символ на экране не появляется ...
Может адрес неверный или неверно записан ? 0x0B800 ???
КАк правильно адрес присвоить указателю ?
адрес 0x0B800 ...
>> char far *vidmem = (char far *) 0x0B800; // Начальный адрес нулевой
>> страницы видео буфера.
>> Никак не понимаю,
>> 1. как дать смещение указателю допустим 10
>> 2. как записать в ячейку памяти на которую будет указывать указатель после
>> смещения, допустим 67h ???
> vidmem[10] = 0x67;У меня не работает, Turbo C ver 3.2 Dos
Хотя адрес вроде верный, на asm этот адрес работает, только записан по другому 0B800h вот так, но компилятор
такую запись не понимает ...
Вот кусок рабочий:
mov ax,0B800h
mov es,ax
// pop es
// jmp CharAddr
// mov di,2100;
mov es:[di],dx
>[оверквотинг удален]
> другому 0B800h вот так, но компилятор
> такую запись не понимает ...
> Вот кусок рабочий:
>
> mov ax,0B800h
> mov es,ax
> // pop es
> // jmp CharAddr
> // mov di,2100;
> mov es:[di],dxА у вас точно плоская модель памяти? Помнится, в DOS это было не совсем так, и разные сегменты (CS, DS, ES...) начинались с разных адресов. В asm-коде у вас ES, а сишный код, скорее всего, генерирует обращение к DS — проверьте ассемблерный листинг программы (какой-то ключ у компилятора Turbo C для этого наверняка есть, на крайний случай — декомпилируйте программу).