Avatar billede zareba Nybegynder
20. august 2002 - 09:53 Der er 14 kommentarer og
1 løsning

ASM Problem

Jeg har et lille asm problem. Jeg skrive fx:

#include <iostream.h>

void SletAlt(void)
{
    _asm
    {
        MOV        CX,0000H
        MOV        DX,184FH
        MOV        BH,7
        MOV        AX,0600H
        INT        10H
    }
}

void Skriv(char* t)
{
    cout << t;
}

void main (void)
{
    char *t = "Test!";
   
    cout << "Slet mig:-)" << endl;

    SletAlt();

    Skriv(t);
}

Så compiler jeg det, og så kommer den elskede blå dos skærm?

PS. jeg bruger 6.0
Avatar billede soreno Praktikant
20. august 2002 - 10:40 #1
hvad er det lige du ønsker "SletAlt" skal kunne gøre, og hvilket os bruger du ?

Se evt. ralph browms interrupt liste her:
http://www.ctyme.com/intr/int-10.htm
Avatar billede soepro Nybegynder
20. august 2002 - 12:43 #2
Hvad med at erstatte SletAlt() med clrscr(), som du fi9nder i <conio.h> ?
Avatar billede razersedge Nybegynder
21. august 2002 - 00:20 #3
soepro, jeg får en undeclared identifier ved clrscr(); og ja jeg har includet conio.h
Avatar billede soepro Nybegynder
21. august 2002 - 11:35 #4
Har du lavet din applikation som 'Console Application' ? Hvis ikke, så skal du have fat i 'Project->Options' for at fortælle, at programmet skal køre i en DOS-boks - for ellers er clrscr() ikke defineret.
Avatar billede reficul Nybegynder
26. august 2002 - 02:18 #5
Du må ikke kalde interrupts direkte fra et Win32-program uanset om det er et konsol-program (Hvilet det er med VC++ 6.0). I Windows NT kan du overhovedet ikke bruge dem og det er nu heller ikke sikkert at du kan kalde en Interrupt 10h i Windows 9x. Ellers foregår det igennem DeviceIoControl!
Avatar billede soepro Nybegynder
26. august 2002 - 09:27 #6
reficul >> Jeg tror da ikke clrscr() fra standard bibliotekerne laver noget den ikke "må" - heller ikke i NT udgaven.

Et alternativ til clrscr() er jo at lave 25 blanke linier der sender det gamle output "ovenud" af skærmen - så kan man nøjes med cout:

for (int = 0; idx < 25; idx++, cout << endl;);
Avatar billede reficul Nybegynder
26. august 2002 - 13:51 #7
Hvem har sagt at jeg kommenterede clrscr()? Næh, jeg kan blot konstatere at clrscr() ikke eksistere nogen steder i Visual C++ 6.0 og MSDN. Jeg må altså konstatere at det er en Borland ting eller en DOS-ting. Et konsol-program, skrevet i VC++ 6.0 er jo ikke et DOS program, blot et Windows-program med et konsol-interface!
Avatar billede reficul Nybegynder
26. august 2002 - 13:54 #8
Du kan hellere ikke nødvendigvis nøjes med 25 linjer, i NT har du en scrollbar, der forlænger konsol-vinduet!
Avatar billede soepro Nybegynder
26. august 2002 - 15:20 #9
reficul >> Ok så kan man hverken clrscr() eller cout * 25 - men hvad KAN man så ? Man kan da også lave console applications under MVC eller ? Kunne du ikke finde noget på MSDN om hvordan man så rent faktisk laver clear-screen ?
Avatar billede reficul Nybegynder
26. august 2002 - 15:33 #10
Okay, her er mit bud på en SletAlt, med brug af Windows API:

#include <windows.h>

void SletAlt () {
    HANDLE hStdout;
    hStdout = GetStdHandle(STD_OUTPUT_HANDLE);

    CONSOLE_SCREEN_BUFFER_INFO console_info;
    GetConsoleScreenBufferInfo(hStdout, &console_info);
   
    DWORD totalchars;
    totalchars = console_info.dwSize.X * console_info.dwSize.Y;

    char *buffer;
    buffer = (char *)LocalAlloc(LPTR, totalchars + 4);

    memset(buffer, ' ', totalchars);
    buffer[totalchars] = 0;

    COORD pos;
    pos.X = 0;
    pos.Y = 0;
    DWORD written;
    WriteConsoleOutputCharacter(hStdout, buffer, totalchars, pos, &written);

    SetConsoleCursorPosition(hStdout, pos);

    LocalFree((HLOCAL)buffer);
}
Avatar billede soepro Nybegynder
26. august 2002 - 15:45 #11
reficul >> Nå, helt analogt til gettextattr() og puttextinfo() under DOS !
Avatar billede reficul Nybegynder
26. august 2002 - 16:03 #12
Ja, men nu er det stadigvæk ikke DOS, men Windows
Avatar billede razersedge Nybegynder
18. oktober 2002 - 02:59 #13
Faldt tilfældigt over spørgsmålet igen.

#include <system.h>

system("cls");

det burde gøre tricket.
Avatar billede razersedge Nybegynder
18. oktober 2002 - 03:30 #14
#include <cstdlib>

var det vist...
Avatar billede zareba Nybegynder
06. juli 2008 - 12:47 #15
Hmm... Det er vist nogle år siden jeg har være her inde, må heller få lukket spørgsmålet.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester