. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->转移指令的原理
主题 : :  实验9自已编完后有调试中有一些不明白的地方,请教高手  [待解决] 回复[ 30次 ]   点击[ 2298次 ]  
tiantian
[帖 主] [ 发表时间:2007-06-24 21:18 ] 
荣誉值:5
信誉值:3
注册日期:2007-06-24 20:51
我在编写实验9的课件中遇到以下问题我没有看课件答案,这是我自已先编写,如果一步用g 命令直接到 mov ax,4c00h地址的话,结果就是正常的达到要求,但是如果用t命令和遇到循环后用p命令就会有些字符没有了,比如我如下的代码 如果用t和p命令调试的话,最后结果就会每一行少一个w字符,这是怎么个一会事,请高手点一下? 
代码如下: 
assume cs:codesg,ds:datasg,ss:stack 
    datasg segment 
     db 'welcome to masm!' 
    datasg ends ;1、00000010b绿色 2h ;2、00100100b绿底红字 24h 
                ;3、01110001b 白底蓝字71h   
    codesg segment 
     start: mov ax,datasg 
            mov ds,ax 
            mov ax,0b800h 
            mov es,ax 
            mov bx,0 
            mov cx,16 
            mov si,0 
            mov di,0 
         s: mov al,[bx] 
            mov ah,2h ;设成绿字 
              mov es:720h[si],ax 
            mov ah,24h ;设成绿底红字 
              mov es:7c0h[si],ax 
            mov ah,71h ;设成白底蓝字 
              mov es:860h[si],ax 
            add si,2 
            inc bx 
            loop s 
            mov ax,4c00h 
            int 21h 
     codesg ends 
            end start
max_2546
[第13楼] [ 回复时间:2009-02-12 11:01 ] 
荣誉值:0
信誉值:0
注册日期:2008-11-29 12:37
由于我的是vista系统,不支持dos全屏,所以做完了也不知道能不能实现题中要求效果,有什么不对的地方望大家指正。
ASSUME    CS:code
              data SEGMENT
              DW        7702h,6502h,6c02h,6302h,6f02h,6d02h,6502h,2002h  ;用16进制表示字符串,02表示属性
              DW        7724h,6524h,6c24h,6324h,6f24h,6d24h,6524h,2024h
              DW        7771h,6571h,6c71h,6371h,6f71h,6d71h,6571h,2071h
              data ENDS
             
               stack SEGMENT
                 DB   16 DUP(0)
              stack ENDS
          code SEGMENT
          start:
              MOV       AX,data
              MOV       DS,AX
              MOV       SI,0
              MOV       AX,stack
              MOV       SS,AX
              MOV       SP,16
              MOV       DI,0720h
              MOV       AX,0b800h
              MOV       ES,AX
              MOV       CX,3
              s0:PUSH      CX
              PUSH      DI
              MOV       CX,8
              s1:MOV    AX,[SI]
              MOV       ES:[DI],AX
              ADD       SI,2
              ADD       DI,2
              LOOP s1
              POP       DI
              JMP       WORD  PTR ES:[DI]    ;cs:ip跳转到b800:0720执行
              ADD       DI,00a0h             ;di指向下一行的中间,也就是跳过160个字节
              POP       CX
              LOOP      s0
              MOV       AX,4c00h
              INT       21h
              code ENDS
              END       start
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved