. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->转移指令的原理
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  实验9搞不懂哪错了  [待解决] 回复[ 2次 ]   点击[ 186次 ]  
dmhorse
[帖 主]   [ 发表时间:2010-11-26 22:23 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-11-26 22:22
做之前,先试了一下这段代码,但没反应,直接用debug修改B800:0000是可以的。


DATAS SEGMENT
    ;此处输入数据段代码  
    db 'Welcome to masm!'
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    
    mov ax,0B800H
    mov es,ax
    mov ax, 0241H
   
    mov bx,0
    mov es:[bx],ax

    
    ;此处输入代码段代码
    ;MOV AH,4CH
    ;INT 21H
CODES ENDS
    END START
dmhorse
[第1楼]   [ 回复时间:2010-11-27 15:10 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-11-26 22:22
搞掂了,测试过,要从第四行(160Bytes * 4 = 480Bytes)开始写入才能显示。不知道为什么,估计是翻页的问题吧。
在Vista下,只能通过debug查看,直接运行exe没反应。


DATAS SEGMENT
    ;此处输入数据段代码  
    db 'Welcome to masm!'
DATAS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS
START:
    MOV AX,DATAS
    MOV DS,AX
    
    mov ax,0B800H
    mov es,ax
    
    mov cx,16
    mov bx,0H
    mov si,0
   s:
    mov al,ds:[si]
    mov ah,02h    
    
    ;total 80 chars
    ;char 16
    ;middle char start at =80 - 16 / 2 = 64 / 2 = 32
    
    ;total rows 25
    ;rows 3
    ;middle row 25 - 3 / 2 = start at 11 row 11 * 160Bytes = 1760
    
    mov es:[bx + 1760 + 64],ax
    
    mov ah,00100100b
    mov es:[bx + 1760 + 64 + 160],ax
    
    mov ah,00010001b
    mov es:[bx + 1760 + 64 + 160 + 160],ax
    inc si
    add bx,2
    loop s
        
    ;此处输入代码段代码
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START
515332695
[第2楼]   [ 回复时间:2010-11-28 11:51 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-06-01 22:23
看结果应该在全屏DOS下看吧。  试试DOS界面后alt+enter,再输入执行文件地址。
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved