. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->转移指令的原理
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  恩,到底是为什么呢  [待解决] 回复[ 3次 ]   点击[ 175次 ]  
ministar
[帖 主]   [ 发表时间:2012-02-01 22:04 ]   [引用]   [回复]   [ top ] 
荣誉值:6
信誉值:0
注册日期:2012-01-03 21:14
实验九

把程序放在cmd和command中执行结果一样,到loop s的时候用p后出现的效果都是每行开头少一个w,如果在loop s指令之前用g指令就不会出现这种情况,就会完整显示。??由于还不能上图,先吧程序放上,在尽量把复制的图上上来吧。。
assume cs:codesg,ds:datasg
datasg segment
db 'welcome to masm!'
datasg ends
codesg segment
start: mov ax,datasg
       mov ds,ax
       mov ax,0b800h
       mov es,ax
       mov bx,0
       mov si,0
       mov cx,16
    s: mov al,[bx]
       mov ah,2h
       mov es:[si+06e0h+0040h],ax
       mov ah,24h
       mov es:[si+0780h+0040h],ax
       mov ah,71h
       mov es:[si+0820h+0040h],ax
       inc bx
    add si,2
    loop s
    
    mov ax,4c00h
    int 21h
    
codesg ends
end   start

这是用g指令的情况:
-r
AX=0000  BX=0000  CX=0045  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=14F7  ES=14F7  SS=1507  CS=1508  IP=0000   NV UP EI PL NZ NA PO NC
1508:0000 B80715        MOV     AX,1507
-g

Program terminated normally
-                               welcome to masm!
                                welcome to masm!
                                welcome to masm!

这是一步步执行到loop s的时候:
-t

AX=7177  BX=0000  CX=0010  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=1507  ES=B800  SS=1507  CS=150elcome to masm! UP EI PL NZ NA PO NC
1508:002A 43           INC       Belcome to masm!
-t                               elcome to masm!

AX=7177  BX=0001  CX=0010  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=1507  ES=B800  SS=1507  CS=1508  IP=002B   NV UP EI PL NZ NA PO NC
1508:002B 83C602       ADD     SI,+02
-t

AX=7177  BX=0001  CX=0010  DX=0000  SP=0000  BP=0000  SI=0002  DI=0000
DS=1507  ES=B800  SS=1507  CS=1508  IP=002E   NV UP EI PL NZ NA PO NC
1508:002E E2E3          LOOP    0013
-p

AX=7121  BX=0010  CX=0000  DX=0000  SP=0000  BP=0000  SI=0020  DI=0000
DS=1507  ES=B800  SS=1507  CS=1508  IP=0030   NV UP EI PL NZ AC PO NC
1508:0030 B8004C        MOV     AX,4C00
tomato
[第1楼]   [ 回复时间:2012-02-04 11:15 ]   [引用]   [回复]   [ top ] 
荣誉值:405
信誉值:0
注册日期:2008-01-19 14:51
你的程序没问题,之所以不显示w是因为你在执行第一次loop循环的时候已经显示出来了,而后面再显示,第一次显示的就被滚屏上去了,所以,要显示完整就要一次执行完,有两种方法,第一种不要debug跟踪,直接在命令行中运行可执行文件,第二种在debug中用g命令一次执行完。
tomato
[第2楼]   [ 回复时间:2012-02-04 11:27 ]   [引用]   [回复]   [ top ] 
荣誉值:405
信誉值:0
注册日期:2008-01-19 14:51
发图片可以到我的博客中看一下。
ministar
[第3楼]   [ 回复时间:2012-02-08 17:06 ]   [引用]   [回复]   [ top ] 
荣誉值:6
信誉值:0
注册日期:2012-01-03 21:14
回复:[第1楼]
------------------
谢谢,tomato哥
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved