标题:汇编~我想在640*480 16色图形模式下显示一个文本文档的内容,可是却总也无法 ...
只看楼主
summer__sing
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-6-28
结帖率:100%
已结贴  问题点数:0 回复次数:7 
汇编~我想在640*480 16色图形模式下显示一个文本文档的内容,可是却总也无法输出,而且我没设置输入可是键盘能输入内容~~~~~高手指点啊!!!!!!
.model small
.386
.stack
.data
PATHNM1 DB 'D:\TEST.TXT'
  BUFFER1 DB 100 DUP (?)
.code
.startup
  mov ah,0fh
  int 10h
   
  push ax
  mov ah,0   
  mov al,12h ;640*480 16色图形
  int 10h
  
  mov ax, @data
  mov ds, ax
  ;mov es,ax
   
  ;打开文件TEST.TXT
  MOV AH,3DH ;打开一个已有文件
  MOV AL,0 ;以读方式打开文件
  LEA DX,PATHNM1 ;DS:DX是串首地址
  INT 21H

  ;读取文件内容,存入BUFFER1
   
  MOV BX,AX ;AX为文件句柄
  MOV AH,3FH ;读文件
  LEA DX,BUFFER1
  MOV CX,10 ;希望读入的字节数
  INT 21H

  ;显示BUFFER1中的内容
  MOV CX,AX ;AX为实际读入的字节数   
  lea si,BUFFER1
   
next:
  mov ah,0eh
  mov bh,00h
  mov bl,04h
  mov al,[si]
  int 10h
  inc si
  loop next
   
  ;关闭文件
  MOV AH,3EH
  INT 21H

  ;按任意键退出
  mov ah,1
  int 21h
  mov ah,0fh ;获得当前显示模式
  mov bh,0
  int 10h
.exit
end
搜索更多相关主题的帖子: 而且 键盘 model 
2011-06-28 14:47
summer__sing
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-6-28
得分:0 
我做了很久了,就是这个地方卡住了,大家帮个忙啊
2011-06-28 15:03
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
得分:20 
看了看书,写了一个范例,在图形模式下打印文字的小程序,在图形模式下药显示文本,个人感觉非常困难! 楼主可以参考一下我的例子。

程序代码:
;
;This Program Compiled Sucess by Masm 6.15
;
assume    cs:code,es:data
data    segment
msg    db    'Press Any Key to Return DOS!'
data    ends
code    segment
start:    
    mov ax,data                   ;要显示的文字在附加段
    mov es,ax

    mov ax,0a000h                 ;指定显存地址
    mov ds,ax
    cld                           ;递增方式

    mov ax,12h                    ;显示模式
    int 10h

    mov cx,lengthof msg           ;字符串长度
    mov bx,0                      ;BX=行
    mov si,0                      ;SI=列
    mov dl,12                     ;DL=字符 颜色
    mov di,offset msg             ;字符首地址
s:
    mov al,es:[di]                ;AL=8X8字符
    call char                     ;调用子程序显示图形下字符
    inc si                        ;下一列
    inc di                        ;下一个字符
    loop s

    
    mov ah,1                      ;暂停
    int 21h
    mov ax,3                      ;返回DOS
    int 10h

    mov ah,4ch
    int 21h
;
char    proc uses ax bx cx dx es si di
    push cx
    push dx
    push bx
    push ax
    mov ax,1130h
    mov bh,3
    int 10h
    pop ax
    mov ah,0
    shl ax,1
    shl ax,1
    shl ax,1
    add bp,ax
    pop bx
    mov ax,80*9
    mul bx
    mov di,ax
    add di,si
    mov cx,8
c1:
    mov dx,3ceh
    mov al,8
    mov ah,es:[bp]
    inc bp
    out dx,ax
    mov dx,3c4h
    mov ax,0f02h
    out dx,ax
    inc dx
    mov al,[di]
    mov byte ptr [di],0
    pop ax
    push ax
    out dx,al
    mov byte ptr [di],0ffh
    add di,80
    loop c1
    pop dx
    pop cx
    ret
char    endp
;
code    ends
end    start


[ 本帖最后由 ansic 于 2011-6-28 16:07 编辑 ]

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-06-28 16:02
summer__sing
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-6-28
得分:0 
回复 3楼 ansic
可以帮我看一下这个程序吗?
程序代码:
.model small
.386
.stack
.data
           PATHNM1 DB 'D:\TEST.TXT'
         BUFFER1 DB 100 DUP (?)
.code
.startup
         mov ah,0fh
         int 10h
         push ax
        
         ;///////////////////////////////////////////
             ;mov ah,0  
             ;mov al,12h       ;640*480 16色图形
             ;int 10h
             ;///////////////////////////////////////////
            
         mov ax, @data
         mov ds, ax
         
          ;打开文件TEST.TXT
          MOV AH,3DH      ;打开一个已有文件
          MOV AL,0        ;以读方式打开文件
          LEA DX,PATHNM1  ;DS:DX是串首地址
          INT 21H

          ;读取文件内容,存入BUFFER1
         
          MOV BX,AX       ;AX为文件句柄
          MOV AH,3FH      ;读文件
          LEA DX,BUFFER1
          MOV CX,10      ;希望读入的字节数
          INT 21H

          ;显示BUFFER1中的内容
          MOV CX,AX       ;AX为实际读入的字节数  
          lea si,BUFFER1

next:
          mov ah,0eh
          mov al,[si]
          mov bh,00h
          mov bl,05h
          int 10h
          inc si
          loop next
         
         ;关闭文件
         MOV AH,3EH
         INT 21H

         ;按任意键退出
         mov ah,1
         int 21h
             mov ah,0fh       ;获得当前显示模式
             mov bh,0
             int 10h
.exit
end
运行结果是:若输入10个a,则输出10个红色的a,我也不知道为什么会有输入的部分


[ 本帖最后由 summer__sing 于 2011-6-28 16:22 编辑 ]
2011-06-28 16:18
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
得分:0 
图形模式不等同于文本模式。需要对端口进行操作的!你把我那程序与你的对文件操作部分代码整合一下就可以啦。

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-06-28 16:27
summer__sing
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-6-28
得分:0 
回复 5楼 ansic
哦,好的,我试试看,你的那个部分是设置端口的啊~貌似不行啊,我把相应的字符串的东西改成我文件操作得到的东西还是无法显示~~而且我很纳闷儿的是为什么我的那个文件操作里运行时刚开始都要输入呢,而且打印的还是输入的东西

[ 本帖最后由 summer__sing 于 2011-6-28 19:34 编辑 ]
2011-06-28 16:33
summer__sing
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-6-28
得分:0 
回复 5楼 ansic
应该是文件操作那个地方的问题,其实要显示字符串的话,这段代码就行:
程序代码:
.model small
.386
.stack
.data
         s db 'ergerger',0
.code
.startup
         mov ah,0fh
         int 10h
         push ax
        
         ;///////////////////////////////////////////
             mov ah,0  
             mov al,12h       ;640*480 16色图形
             int 10h
             ;///////////////////////////////////////////
            
         mov ax, @data
         mov ds, ax
         mov es,ax
        
         mov ah,13h
         mov al,1
         mov bh,0
         mov bl,05h
         mov cx,8
         mov dh,0
         mov dl,0
         lea bp,s
         int 10h
         mov ah,1
         int 21h
             mov ah,0fh       ;获得当前显示模式
             mov bh,0
             int 10h
.exit
end
大家帮帮忙啊~那个文件显示怎么就是出不来啊!!!
2011-06-28 19:45
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
得分:0 
爱莫能助!

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-06-28 21:11



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-344224-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.156865 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved