- [cutebe] 相当牛,这个苦思冥想也值了。^_^ 11/30 00:00
- [parse] 如果忽略消息循环,那么操作系统加载的程序很快就执行完了,就像DOS程序一闪而过,所以CPU会空闲下来 06/30 09:04
- [游客] 楼主好厉害,挺一下! 01/19 08:43
- [游客] 很不错。 01/04 18:36
- [chinatree] 潜力贴留名,沙发。 11/08 12:58
- [youthangel] 恩,这次对了 10/30 18:56
- [fpamc] mov bx,18 在这条指令的上边是不是要加一条sub dx,dx? 10/30 10:03
- [fpamc] 对的 10/27 11:19
- [fpamc] 对的 10/27 09:00
- [fpamc] 哦,对不起,看错了。实验13也有一个7ch中断 10/27 08:52
- [游客] 现在急需一个汇编大作业。。。。。。可以么。。。。。如果今天之内看见留言 就加 1765496715 12/28 16:52
- [youthangel] 这算是对我学习的鼓励吗?谢谢!咱们这样交流就可以了 10/11 15:48
- [fpamc] 多日观察,你的学习积极性挺高的。可以来我们群了。群号:75916434 10/11 10:58
[2012-10-10 12:31] 实验四
(1)
;内容实验室第一题
;要求:向内存0:200~0:23f依次传送数据0~63(3fh)
;算法分析:
; 第一种方法(ds)=0,(bx)=200 (al)=0 循环64次每次(ds:[bx])=(ax) inc bx,inc al
; 第二种方法让给初始值(ds)=0,(bx)=0,利用loop循环64次每次(ds:[bx+200h])=(bl),inc bx
; 第三种方法转换0:200为0020:0,让(ds)=20,(bx)=0利用loop循环64次每次(ds:[bx])=(bl),inc bx
;方法一:
assume cs:code
code segment
start:
mov ax,0
mov ds,ax
mov bx,200h ;ds:[bx]指向0:200
mov ax,0 ;ax初始化为0
mov cx,64 ;设置循环控制变量cx
s:
mov [bx],al ;传送数据
inc bx ;bx加一指向下一个内存单元
inc al ;al加一
loop s
;退出
mov ax,4c00h
int 21h
code ends
end start
;方法二
assume cs:code
code segment
start:
mov ax,0
mov ds,ax
mov bx,0 ;ds:[bx]指向0:0
mov ax,200h ;偏移量 放在AX中
mov cx,64 ;设置循环控制变量cx
s:
mov dx,bx ;用dx暂存bx中的数据
add bx,ax ;得到目的地址,在bx中
mov [bx],bl ;传送数据
mov bx,dx ;还原bx中的数据
inc bx ;bx加一指向下一个内存单元,同时数据也加一
loop s
;退出
mov ax,4c00h
int 21h
code ends
end start
;方法三
;共九条指令
assume cs:code
code segment
start:
mov ax,20h
mov ds,ax
mov bx,0 ;ds:[bx]指向0020:0
mov cx,64 ;设置循环控制变量cx
s:
mov [bx],bl ;传送数据
inc bx ;bx加一指向下一个内存单元,同时数据也加一
loop s
;退出
mov ax,4c00h
int 21h
code ends
end start
(2)
见(1)的第三种方法
(3)
assume cs:code
code segment
start:
mov ax,cs;第一个空
mov ds,ax ;将代码段的段地址赋给ds
mov ax,0020h
mov es,ax
mov bx,0
mov cx,0017h;第二个空
s:
mov al,[bx]
mov es:[bx],al
inc bx
loop s
;退出
mov ax,4c00h
int 21h
code ends
end start
说明:
mov cx,__这个空我也不知道填什么,但我们可以探究一下
首先,随便填一个数,比如:23
接下来,我们进入debug -u查看一下代码所处的内存空间,由图我们可以看出程序共占用了1cH个字节
其中从开始到mov ax,4c00h占用了0017H个字节,所以填17h
有些参看答案说程序初始化时,cx中就存有程序的长度
但我们看到图3.0中CX=02cfH,显然这里是有问题的
;内容实验室第一题
;要求:向内存0:200~0:23f依次传送数据0~63(3fh)
;算法分析:
; 第一种方法(ds)=0,(bx)=200 (al)=0 循环64次每次(ds:[bx])=(ax) inc bx,inc al
; 第二种方法让给初始值(ds)=0,(bx)=0,利用loop循环64次每次(ds:[bx+200h])=(bl),inc bx
; 第三种方法转换0:200为0020:0,让(ds)=20,(bx)=0利用loop循环64次每次(ds:[bx])=(bl),inc bx
;方法一:
assume cs:code
code segment
start:
mov ax,0
mov ds,ax
mov bx,200h ;ds:[bx]指向0:200
mov ax,0 ;ax初始化为0
mov cx,64 ;设置循环控制变量cx
s:
mov [bx],al ;传送数据
inc bx ;bx加一指向下一个内存单元
inc al ;al加一
loop s
;退出
mov ax,4c00h
int 21h
code ends
end start
;方法二
assume cs:code
code segment
start:
mov ax,0
mov ds,ax
mov bx,0 ;ds:[bx]指向0:0
mov ax,200h ;偏移量 放在AX中
mov cx,64 ;设置循环控制变量cx
s:
mov dx,bx ;用dx暂存bx中的数据
add bx,ax ;得到目的地址,在bx中
mov [bx],bl ;传送数据
mov bx,dx ;还原bx中的数据
inc bx ;bx加一指向下一个内存单元,同时数据也加一
loop s
;退出
mov ax,4c00h
int 21h
code ends
end start
;方法三
;共九条指令
assume cs:code
code segment
start:
mov ax,20h
mov ds,ax
mov bx,0 ;ds:[bx]指向0020:0
mov cx,64 ;设置循环控制变量cx
s:
mov [bx],bl ;传送数据
inc bx ;bx加一指向下一个内存单元,同时数据也加一
loop s
;退出
mov ax,4c00h
int 21h
code ends
end start
(2)
见(1)的第三种方法
(3)
assume cs:code
code segment
start:
mov ax,cs;第一个空
mov ds,ax ;将代码段的段地址赋给ds
mov ax,0020h
mov es,ax
mov bx,0
mov cx,0017h;第二个空
s:
mov al,[bx]
mov es:[bx],al
inc bx
loop s
;退出
mov ax,4c00h
int 21h
code ends
end start
说明:
mov cx,__这个空我也不知道填什么,但我们可以探究一下
首先,随便填一个数,比如:23
接下来,我们进入debug -u查看一下代码所处的内存空间,由图我们可以看出程序共占用了1cH个字节
其中从开始到mov ax,4c00h占用了0017H个字节,所以填17h
有些参看答案说程序初始化时,cx中就存有程序的长度
但我们看到图3.0中CX=02cfH,显然这里是有问题的
评论次数(0) |
浏览次数(216) |
类型(汇编作业) |
收藏此文 |