|
主题 : : 实验13的(3)在2,4,6,8行显示四句语文诗 [待解决] |
回复[ 13次 ]
点击[ 1097次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2008-07-25 10:30 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-07-18 09:32 |
;实验13的(3)在2,4,6,8行显示四句语文诗
assume cs:code
code segment
s1: db 'Good,better,best','$'
s2: db 'Never let it test,','$'
s3: db 'Till good is better,','$'
s4: db 'And better,best.','$'
s: dw offset s1,offset s2,offset s3,offset s4
row:db 2,4,6,8
start:mov ax,cs
mov ds,ax
mov bx,offset s;把s的ea给bx,然后0-1单元的内容是s1的ea,以此类推
mov si,offset row
mov cx,4
ok:mov bh,0
mov dh,ds:[si];---得到行号
mov dl,0
mov ah,2
int 10h
mov dx,ds:[bx];---第一个s1遇到'$'结束一行
mov ah,9;调用21中断例程的9号子程序
int 21h
inc si;---指到4以此类推
add bx,2;----指到s2以此类推
loop ok
mov ax,4c00
int 21h
code ends
end start | | |
|
|
|
|
[第1楼]
[ 回复时间:2008-07-25 10:32 ]
[引用]
[回复]
[ top ] | |
荣誉值:472
信誉值:12
注册日期:2007-10-16 15:34 |
建议楼主完成了一下后在进行下一章得学习!
参看前言 | | |
|
|
|
|
[第2楼]
[ 回复时间:2008-07-25 10:39 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-07-18 09:32 |
那是,一定要把汇编弄得个精通,刚学习一个星期,请多指教,做了几年的高级语言开发,突然看到了王爽老师这本书,好很。 | | |
|
|
|
|
[第3楼]
[ 回复时间:2008-07-25 10:40 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-07-18 09:32 |
回复:[第1楼]
------------------
那是,一定要把汇编弄得个精通,刚学习一个星期,请多指教,做了几年的高级语言开发,突然看到了王爽老师这本书,好很。 | | |
|
|
|
|
[第4楼]
[ 回复时间:2008-07-25 10:43 ]
[引用]
[回复]
[ top ] | |
荣誉值:472
信誉值:12
注册日期:2007-10-16 15:34 |
看到了楼主关于试验12的程序的提问,建议完成实验12后再学习后面的内容o(∩_∩)o...
上面这个程序主要是调用的中断,和c调用函数没什么区别,没什么技术含量,真正明白了中断得原理才是最重要的。 | | |
|
|
|
|
[第5楼]
[ 回复时间:2008-07-25 10:54 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-07-18 09:32 |
回复:[第4楼]
------------------
对于实验12后我不知道是不是和我的机子有联系是AMD的。我先把程序安装到0000:0200处,然后修改0中断的入口地址也就是是:0000:(0-1)=0200,0000:(2-3)=0000所以当INT 0的时候CS:0000,IP:0200就可以指我安装在内存的程序了。不知道为什么,请多指教。 | | |
|
|
|
|
[第6楼]
[ 回复时间:2008-09-23 21:34 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-09-21 10:17 |
D:\dev\asm\tr252>ml /c d1306.asm
Microsoft (R) Macro Assembler Version 6.14.8444
Copyright (C) Microsoft Corp 1981-1997. All rights reserved.
Assembling: d1306.asm
error A4910: cannot open file: D:\dev\asm\tools\RadASM\masm32\bin\ml.err
d1306.asm(4) : error A2008: : db
d1306.asm(5) : error A2008: : db
d1306.asm(6) : error A2008: : db
d1306.asm(7) : error A2008: : db
d1306.asm(8) : error A2008: : dw
d1306.asm(9) : error A2008: : db
d1306.asm(27) : error A2048:
为什么编译不正常,还是编译命令写错了? | | |
|
|
|
|
[第7楼]
[ 回复时间:2008-09-24 09:09 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-09-21 10:17 |
刚测试,用:
assume cs:code
code segment
s1 db 'Good,better,best','$'
s2 db 'Never let it test,','$'
s3 db 'Till good is better,','$'
s4 db 'And better,best.','$'
s dw offset s1,offset s2,offset s3,offset s4
row db 2,4,6,8
去掉中间的":" 即可 | | |
|
|
|
|
[第8楼]
[ 回复时间:2009-02-05 17:29 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-01-11 15:34 |
楼主 倒数第四行 MOV AX,4C00 少了H...... | | |
|
|
|
|
[第9楼]
[ 回复时间:2010-02-11 14:46 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-01-22 19:07 |
ok:mov bh,0
mov dh,ds:[si];---得到行号
mov dl,0
mov ah,2
int 10h
mov dx,ds:[bx];---第一个s1遇到'$'结束一行请问
请问:第一句 mov bh,0 它有没有改变bx中的内容。如果改变了,那么mov dx,ds:[bx];---还能指向第一行的数据吗 | | |
|
|
|
|
[第10楼]
[ 回复时间:2010-03-01 22:47 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-02-02 15:08 |
9楼的问题也是一直我困惑的,mov bh,0 是会改变了bx的,我门在循环体外面语句mov bx,offset s 设置的地址偏移地址的确有可能被改变。我门知道偏移地址是16位的,高8位有可能被mov bh,0语句置0,所幸的是本实验中偏移地址最大不会超过256,所以mov bx,offset s语句执行后已将bh置0的,所以mov bh,0语句并没有改变bx的值。本试验可以得到想要的结果,但此方案没有通用性。我想王爽老师此例主要是要让我门理解将数据结构化存放的意义,特别是将各偏移地址的集中存放以方便访问的技巧,所以不必深究。 | | |
|
|
|
|
[第11楼]
[ 回复时间:2010-03-01 22:51 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-02-02 15:08 |
此例中在循环体中用堆栈保存bx或许可以让程序更强壮些。 | | |
|
|
|
|
[第12楼]
[ 回复时间:2013-08-30 01:06 ]
[引用]
[回复]
[ top ] | |
荣誉值:26
信誉值:0
注册日期:2013-07-15 09:25 |
9楼、10楼是在为自行车修高速公路。汇编哪有哪么多通用性,通用性是高级语言必须负担的包袱!
汇编要的就是程序与机器高度契合所产生的个性最大化和自由的灵魂!
高级语言则是追求通用性所产生的共性最大化和束缚手脚的思想! | | |
|
|
|
|
[第13楼]
[ 回复时间:2013-09-23 09:04 ]
[引用]
[回复]
[ top ] | |
荣誉值:4
信誉值:0
注册日期:2013-02-02 01:48 |
|