. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->转移指令的原理
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  实验9,我写的代码,跪求高手检验  [已解决] 回复[ 9次 ]   点击[ 368次 ]  
916211127
[帖 主]   [ 发表时间:2011-12-30 19:58 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:8
注册日期:2011-12-24 15:22
assume cs:code,ds:data,ss:stack
data segment
        db'welcome to masm!'
        db 02H,24H,71H
data ends
stack segment
        dw 8 dup(0)
stack ends
code segment
   start:   mov ax,data
                        mov ds,ax
                        mov ax,stack
                        mov ss,ax
                        mov sp,10H
                        
                        mov ax,0b872H
                        mov cx,3
        
        s:                mov si,0
                        mov di,0
                        push cx
                        push ax
                        mov es,ax
                        mov cx,16
                        
    s1:                mov al,ds:[si]
                        mov es:[di],al
                        inc si
                        add di,2
                        loop s1
                        
                        mov si,0
                        mov di,1
                        mov cx,16
                        
        s2:                mov al,ds:16[si]
                        mov es:[di],al
                        add di,2
                        loop s2
                        
                        pop ax
                        pop cx
                        add ax,0ah
                        loop s
                        
                        mov ax,4c00h         
                        int 21h  
code ends
end start
tomato
[第1楼]   [ 回复时间:2011-12-30 22:13 ]   [引用]   [回复]   [ top ] 
荣誉值:405
信誉值:0
注册日期:2008-01-19 14:51
没问题。
916211127
[第2楼]   [ 回复时间:2011-12-31 12:10 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:8
注册日期:2011-12-24 15:22
谢谢帮我检查,可是为什么我的电脑就是不显示那三行,而且b872:0000那一段内存数值没有发生变化,也就是说根本没有把数据传递到那一段内存中
tomato
[第3楼]   [ 回复时间:2011-12-31 20:34 ]   [引用]   [回复]   [ top ] 
荣誉值:405
信誉值:0
注册日期:2008-01-19 14:51
你要直接运行,千万不要单步跟踪。
tomato
[第4楼]   [ 回复时间:2011-12-31 20:38 ]   [引用]   [回复]   [ top ] 
荣誉值:405
信誉值:0
注册日期:2008-01-19 14:51
你的程序可以再精简,字符和颜色值可以在一个循环中一起赋值,没有必要写两个循环。还有,显存段地址可以在大循环外赋一次值就可以了,段地址一直不变,偏移地址可以用一个偏移地址寄存器定位,显示到下一行的时候,让偏移地址寄存器加上160就可以了。
916211127
[第5楼]   [ 回复时间:2012-01-01 20:33 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:8
注册日期:2011-12-24 15:22
为什么我运行了,屏幕上就是没有出现呢
916211127
[第6楼]   [ 回复时间:2012-01-01 20:35 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:8
注册日期:2011-12-24 15:22
Object filename [94.OBJ]:
Source listing  [NUL.LST]:
Cross-reference [NUL.CRF]:

  50068 + 415196 Bytes symbol space free

      0 Warning Errors
      0 Severe  Errors

E:\try>link

Microsoft (R) Overlay Linker  Version 3.60
Copyright (C) Microsoft Corp 1983-1987.  All rights reserved.

Object Modules [.OBJ]: 94
Run File [94.EXE]:
List File [NUL.MAP]:
Libraries [.LIB]:
LINK : warning L4021: no stack segment

E:\try>94.exe

E:\try>94.exe
是这样运行吗?
tomato
[第7楼]   [ 回复时间:2012-01-01 22:22 ]   [引用]   [回复]   [ top ] 
荣誉值:405
信誉值:0
注册日期:2008-01-19 14:51
操作应该是没问题。你显存的地址写的大了,显存段地址是b800h,偏移地址是从0到4000.
916211127
[第8楼]   [ 回复时间:2012-01-02 12:16 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:8
注册日期:2011-12-24 15:22
谢谢
916211127
[第9楼]   [ 回复时间:2012-01-02 12:16 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:8
注册日期:2011-12-24 15:22
此贴由 贴主 于 [ 2012-01-02 12:16 ] 结贴。 结贴原因:问题已解决
得分情况: 7楼(tomato):16分  
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved