gpt4 book ai didi

c++ - 使用内联 ASM c++ 显示 640x480 BMP 图像

转载 作者:行者123 更新时间:2023-11-28 06:13:37 24 4
gpt4 key购买 nike

你好,我正在尝试用 C++ 中的内联 ASM 显示 640x480 BMP 图像(16 色位图),它必须与内联 asm 一起使用,因为这是一项作业。我在汇编代码中有这段代码可以做到这一点:

cad db 'Error, file not found, press a key to finish.$'
filename db "C:\image.bmp"
handle dw ?
col dw 0
ren dw 479
col1 dw ?
ren1 dw ?
col2 dw ?
ren2 dw ?
buffer db ?
colo db ?

eti0:
mov ah,3dh
mov al,0
mov dx,offset filename
int 21h
jc err
mov handle,ax
mov cx,118d

eti1:
push cx
mov ah,3fh
mov bx,handle
mov dx,offset buffer
mov cx,1
int 21h
pop cx
loop eti1

mov ah,00h
mov al,18d
int 10h

eti2:
mov ah,3fh
mov bx,handle
mov dx,offset buffer
mov cx,1
int 21h
mov al,buffer
and al,11110000b
ror al,4
mov colo,al
mov ah,0ch
mov al,colo
mov cx,col
mov dx,ren
int 10h
mov al,buffer
and al,00001111b
mov colo,al
inc col
mov ah,0ch
mov al,colo
mov cx,col
mov dx,ren
int 10h
inc col
mov ah,0ch
mov al,colo
mov cx,col
mov dx,ren
int 10h
cmp col,639d
jbe eti2
mov col,0
dec ren
cmp ren,-1
jne eti2

现在将它放入内联 ASM 中,我正在尝试使用下一个代码:

#include<stdio.h>
#include<conio.h>
#include<iostream.h>
#include<dos.h>
#include<stdlib.h>

void main(void)
{
clrscr();
unsigned char buffer,colo;
unsigned int handle,col=0,ren=479,col1,col2,ren2;
int filename=675892105109971031011104698109112;
asm{
mov ah,3dh
mov al,0
mov dx,filename
int 21h
mov handle,ax
mov cx,118d
}
cout<<"si mino1";
for(int i=118;i>0;i++){
asm{
mov ah,3fh
mov bx,handle
mov dx,offset buffer
mov cx,1
int 21h
}
}
asm{
mov ah,00h
mov al,18d
int 10h
}
cout<<"si mino2";
eti2:
asm{
mov ah,3fh
mov bx,handle
mov dx,offset buffer
mov cx,1
int 21h
mov al,buffer
and al,11110000b
ror al,4
mov colo,al
mov ah,0ch
mov al,colo
mov cx,col
mov dx,ren
int 10h
mov al,buffer
and al,00001111b
mov colo,al
inc col
mov ah,0ch
mov al,colo
mov cx,col
mov dx,ren
int 10h
inc col
mov ah,0ch
mov al,colo
mov cx,col
mov dx,ren
int 10h
cmp col,639d
jbe eti2
mov col,0
dec ren
cmp ren,-1
jne eti2
}
cout<<"si mino3";
getch();
}

代码到达第一个cout,然后进入无限循环。

最佳答案

你的意思是下面这行代码吗:

for(int i=118;i>0;i++)

这会将 i 初始化为 118,并且每次迭代都会加 1。它只会越来越大(直到 i 溢出)。循环是否应该继续的测试是 i > 0,它将始终为真(直到 i 溢出)。

您确定您处于无限循环中吗?也许很多很多 int 21h 只需要非常非常长的时间。

关于c++ - 使用内联 ASM c++ 显示 640x480 BMP 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30745896/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com