- [游客] 没问题。继续。 04/15 08:58
- [游客] 嗯。挺好,不过,图看着有点乱。 04/15 08:56
- [bslg123] 很不错,博主已经意识到灵活的定位内存,既然已经意识到那是不是可以在进一步优化代码呢。把你的程序在进行 04/09 09:01
- [younggay] 嗯。不错,其实,还可以做两次循环,先把a段的值复制到c段,然后,将b段的值加到C段上。 04/03 11:03
- [younggay] 没问题。 04/03 10:59
- [mouse] 等你学到第六章start标号就有更感性的认识了~ 03/31 18:54
- [crazyman] ip初始值是否一定是0 ========== 不一定。程序最后的end 标号 这个指令是知名程序 03/31 16:56
- [crazyman] 是bl,还是bx?为统一起见,最初都使用bl,但发现 ds:[bl]是不合法的表达,修改了一下。 03/31 15:00
[2009-04-14 18:09] 实验10之解决除法溢出的问题
实验原理:
1.使用div指令计算最初dx内容(扩展为32位)除以cx内容,假设结果为A,余数为B
2.使用div指令计算最初(AX内容+16^4xB)除以cx内容,假设结果为C,余数为D
3.A装入dx,C装入ax,D装入CX
总结:本题关键是把数学问题考虑清楚,比如说使用div指令的时候是否会溢出,高位余数B如何处理等
下面divdw标号开始的是子程序部分
assume cs:code
code segment
start:mov ax,4240h
mov dx,000fh
mov cx,0ah
call divdw
mov ax,4c00h
...
1.使用div指令计算最初dx内容(扩展为32位)除以cx内容,假设结果为A,余数为B
2.使用div指令计算最初(AX内容+16^4xB)除以cx内容,假设结果为C,余数为D
3.A装入dx,C装入ax,D装入CX
总结:本题关键是把数学问题考虑清楚,比如说使用div指令的时候是否会溢出,高位余数B如何处理等
下面divdw标号开始的是子程序部分
assume cs:code
code segment
start:mov ax,4240h
mov dx,000fh
mov cx,0ah
call divdw
mov ax,4c00h
...
阅读全文 |
评论次数(1) |
浏览次数(378) |
所属类型(实验分析)
[2009-04-14 16:23] 实验10之显示字符串
标号s开始是子程序的内容,通过jcxz得到字符串长度,作为循环次数。
;说明:在指定的位置,用指定的颜色,显示一个用0结束的字符串
;参数:(dh)=行号(取值范围0-24),(dl)=列号(0-79) (cl)=颜色 ds:si指向首地址
;返回:无
assume cs:code
data segment
db 'welcome to masm'
data ends
stack segment
dd 16 dup (0)
stack ends
code segment
start:mov ax,stack
mov ss,...
;说明:在指定的位置,用指定的颜色,显示一个用0结束的字符串
;参数:(dh)=行号(取值范围0-24),(dl)=列号(0-79) (cl)=颜色 ds:si指向首地址
;返回:无
assume cs:code
data segment
db 'welcome to masm'
data ends
stack segment
dd 16 dup (0)
stack ends
code segment
start:mov ax,stack
mov ss,...
阅读全文 |
评论次数(1) |
浏览次数(370) |
所属类型(实验分析)
[2009-04-08 18:33] 实验7 寻址方式在结构化数据访问中的应用
基本思路:
1.用3个循环分别实现年份,收入和雇员信息。再用一个循环计算平均收入。
2.ds指向data,bx保存偏移地址;es指向table,di保存偏移地址
assume cs:codesg
data segment
db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
db '1993','1994','1995'
dd 16,22,382,1356,2390,...
1.用3个循环分别实现年份,收入和雇员信息。再用一个循环计算平均收入。
2.ds指向data,bx保存偏移地址;es指向table,di保存偏移地址
assume cs:codesg
data segment
db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
db '1993','1994','1995'
dd 16,22,382,1356,2390,...
阅读全文 |
评论次数(1) |
浏览次数(420) |
所属类型(实验分析)
[2009-04-04 15:44] 程序7.1有错误
assume ds:data
data segment
db 'unIX'
db 'foRK'
data ends
code segment
start: mov al,'a'
mov bl,'b'
mov ax,4c00h
int 21h
code ends
end start
结果提示error A2062: Missing or unreachable CS
我感到很费解,因为书上说assume没有也不要紧,start标号所指的内容是第一条指令。既然这样,为什么还会报错?...
data segment
db 'unIX'
db 'foRK'
data ends
code segment
start: mov al,'a'
mov bl,'b'
mov ax,4c00h
int 21h
code ends
end start
结果提示error A2062: Missing or unreachable CS
我感到很费解,因为书上说assume没有也不要紧,start标号所指的内容是第一条指令。既然这样,为什么还会报错?...
阅读全文 |
评论次数(0) |
浏览次数(273) |
所属类型(读书笔记)
[2009-04-01 21:47] 实验5第6小题分析
b的段地址是13f5,运行结果是
-d 13f5:0000
13F5:0000 08 00 07 00 06 00 05 00-04 00 03 00 02 00 01 00
刚开始还以为结果有问题,应该是0008怎么变成0800了?后来想到高位地址储存高8位,所以16位的字单元看起来和习惯是相反的,前8位和后8位要倒过来看
以下是代码
assume cs:code
a segment
dw 1,2,3,4,5,6,7,8
a ends
b segment
dw 0,0,0,0,0,0,0,0
b ends
code segment
start:...
-d 13f5:0000
13F5:0000 08 00 07 00 06 00 05 00-04 00 03 00 02 00 01 00
刚开始还以为结果有问题,应该是0008怎么变成0800了?后来想到高位地址储存高8位,所以16位的字单元看起来和习惯是相反的,前8位和后8位要倒过来看
以下是代码
assume cs:code
a segment
dw 1,2,3,4,5,6,7,8
a ends
b segment
dw 0,0,0,0,0,0,0,0
b ends
code segment
start:...
阅读全文 |
评论次数(1) |
浏览次数(392) |
所属类型(实验分析)
[2009-04-01 20:46] 实验5第5小题内容
本题要求a,b段数据相加放入c段对应单元中。
1.首先考虑的问题是,用什么寄存器存放a,b,c的段地址。只能用段寄存器cs,ds,es,ss.cs肯定不行,要放代码。用ss不是一定不行,但可能做循环比较麻烦,所以用es和ds。其中ds是a段和b段轮流用。
2.循环体中要用dx做中介改变ds内容。刚开始用的是ax,结果把al中保存的和的结果覆盖掉了。
assume cs:code
a segment
db 1,2,3,4,5,6,7,8
a ends
b segment
db 1,2,3,4,5,6,7,8
b ends
c segment
db 0,0,0,...
1.首先考虑的问题是,用什么寄存器存放a,b,c的段地址。只能用段寄存器cs,ds,es,ss.cs肯定不行,要放代码。用ss不是一定不行,但可能做循环比较麻烦,所以用es和ds。其中ds是a段和b段轮流用。
2.循环体中要用dx做中介改变ds内容。刚开始用的是ax,结果把al中保存的和的结果覆盖掉了。
assume cs:code
a segment
db 1,2,3,4,5,6,7,8
a ends
b segment
db 1,2,3,4,5,6,7,8
b ends
c segment
db 0,0,0,...
阅读全文 |
评论次数(1) |
浏览次数(371) |
所属类型(实验分析)
[2009-03-31 16:03] 实验4 [bx]和loop的使用(3)
思考过程如图所示,调试没有问题。但是有一个地方有疑问:ip初始值是否一定是0.cs:ip一定指向第一条指令,但是,比如说第一条指令偏移为100h,是否有可能呢?这样段起始地址仍然是16的整数倍,但ip不是0?哪里规定了第一条指令ip一定为0?似乎没找到
下面是运行结果
-u 20:0
0020:0000 8CC8 MOV AX,CS
0020:0002 8ED8 MOV DS,AX
0020:0004 B82000 MOV AX,0020
0020:0007 8EC0 MOV ES,...
下面是运行结果
-u 20:0
0020:0000 8CC8 MOV AX,CS
0020:0002 8ED8 MOV DS,AX
0020:0004 B82000 MOV AX,0020
0020:0007 8EC0 MOV ES,...
阅读全文 |
评论次数(2) |
浏览次数(406) |
所属类型(实验分析)
[2009-03-31 14:35] 实验4 bx和loop的使用(1)分析和代码
以下代码通过了debug测试
assume cs:codesg
codesg segment
mov ax,20h
mov ds,ax
mov al,0
mov ds:[0],al
mov cx,64
mov bx,1
s:mov al,bl
mov ds:[bx],al
inc bx
loop s
mov ax,4c00h
int 21h
codesg ends
end
总结:本题主要在考虑使用8位还是16位寄存器的时候花了一些时间。是bl,还是bx?为统一起见,最初都使用bl,但发现
ds:[b...
assume cs:codesg
codesg segment
mov ax,20h
mov ds,ax
mov al,0
mov ds:[0],al
mov cx,64
mov bx,1
s:mov al,bl
mov ds:[bx],al
inc bx
loop s
mov ax,4c00h
int 21h
codesg ends
end
总结:本题主要在考虑使用8位还是16位寄存器的时候花了一些时间。是bl,还是bx?为统一起见,最初都使用bl,但发现
ds:[b...
阅读全文 |
评论次数(1) |
浏览次数(364) |
所属类型(实验分析)