. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->转移指令的原理
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  别人写的这个程序9好啊`但是我有点不懂  [待解决] 回复[ 8次 ]   点击[ 676次 ]  
xuan214
[帖 主]   [ 发表时间:2009-03-19 22:27 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:4
注册日期:2009-02-22 23:57
assume ds:data,cs:code
data segment
db 'welcome to masm!'
db 0000010b,00100100b,01110001b
data ends
code segment
start:mov ax,data
mov ds,ax
mov ax,0b800h
mov es,ax
mov bp,0
mov bx,0
mov di,0
mov cx,16
s:mov al,ds:[bx]
mov ah,[di]
mov es:[bp+720H],ax
mov es:[bp+7c0H],ax
mov es:[bp+860H],ax
inc di
add bx,1
add bp,2
loop s
mov ax,4c00h
int 21h
code ends
end start
 

这里
mov es:[bp+720H],ax
mov es:[bp+7c0H],ax         这里为什么要加bp啊?
mov es:[bp+860H],ax
还有这里
add bp,2                    这里为什么要加2?

晕死了``我回头看了第8章还是不明白 =.=```
mouse
[第1楼]   [ 回复时间:2009-03-19 22:59 ]   [引用]   [回复]   [ top ] 
荣誉值:472
信誉值:12
注册日期:2007-10-16 15:34
建议自己先努力做,而不要把看懂别人的程序就当做完了 ^_^

我觉得这个试验唯一的难点就是先看懂资料,不过也是相对很简单的,有例子,自己debug和小程序试验下就很容易搞明白。

先在屏幕显示一个字符(这个应该很简单,书上有讲了)

人后显示一个字符串(这个也就是在第一个基础上加循环,如loop)这个基本就完成实验九了,显示一个字符串

然后显示三个字符串就ok了,效率最低的方法就是把显示一个字符串的代码复制三份  呵呵

使用双循环嵌套代码就精简多了。

只要努力会发现做出来还是不太难的,主要努力~
xuan214
[第2楼]   [ 回复时间:2009-03-19 23:33 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:4
注册日期:2009-02-22 23:57
不知道为什么`越学越不懂了 =.= 好象以前的都忘了``可能为了赶进度吧`我只是想快点把这书看完,然后去看C 也许能把现在不懂的都理解了...哎`
sleepinglion
[第3楼]   [ 回复时间:2010-07-27 16:38 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-07-13 23:22
楼主,我试了,这个程序实现的功能和书本上要求的功能是不一样的。建议你先看看程序运行的结果后再来看看源代码吧。
int20
[第4楼]   [ 回复时间:2010-08-01 13:19 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:0
注册日期:2010-07-25 14:15
1.这个程序没有完成书上的要求,建议你找个正确的答案来研究.

2.实验9,是本书非常经典的一个习题,他涉及到了多项技巧和知识,一定要争取自己独立完成,相关的知识不明白的,可以回头看之前的章节.

3.你赶进度的心情可以理解,但你得看是什么学科,汇编语言是实践性非常强的一门语言,可不是看一遍书就算完事了,真正看书的时间,跟上机操作的时间比,1:10都不一定够,想学好汇编,就得准备好大量的时间和精力,没有付出,是不会有收获的.
xueyugaoyuan
[第5楼]   [ 回复时间:2012-08-20 20:37 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2012-08-14 17:57
这个程序没有达到书上的要求,建议重做》
不过要是在 s:mov al,ds:[bx] 之前加上add bx,10h  也能达到书上的要求了
xueyugaoyuan
[第6楼]   [ 回复时间:2012-08-20 20:40 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2012-08-14 17:57
这个程序没有达到书上的要求,建议重做》 
不过要是在 s:mov al,ds:[bx] 之前加上add bx,10h  也能达到书上的要求了 
。------------------
回复:上面是add di,10h   
      不是:add bx,10h
q3889
[第7楼]   [ 回复时间:2012-11-13 07:03 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2012-10-30 12:52
楼上说得对,楼主应该是抄错了:mov di,0这句应该是:mov di,16才对,指向data段的第16字节显示颜色的种类
q3889
[第8楼]   [ 回复时间:2012-11-13 08:14 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2012-10-30 12:52
咳,仔细看了一下,楼主说的这个例子还是有问题,我根据这个思路该了下,运行也能通过:
assume cs:code
data segment
  db 'welcome to masm!'
  db 02h,24h,71h
data ends

code segment
start:
       mov ax,data
       mov ds,ax
       mov ax,0b800h
       mov es,ax
       mov bx,1760      ;12行
        mov bp,16        ;要选择的颜色
       mov cx,3         ;外循环
    s0:
       push cx
       mov si,0
       mov di,33*2      ;列
        mov cx,16        ;内循环
    s:
       mov al,[si]
       mov ah,ds:[bp]
       mov es:[dx+di],ax
       inc si
       add di,2
       loop s
       add bx,160         ; 换行
        inc bp             ;下一颜色
        pop cx
       loop s0

       mov ax,4c00h
       int 21h

code ends
end start
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved