程式如下,看程式能不能正常返回
assume cs:codesg
codesg segment
mov ax,4c00h
int 21h
start:mov ax,0
s:nop
nop
mov di,offset s
mov si,offset s2
mov ax,cs:[si]
mov cs:[di],ax
s0:jmp short s
s1:mov ax,0
int 21h
mov ax,0
s2:jmp short s1
nop
codesg ends
end start
不运行程式来看...
- [gyq] mov [bx],__ 这个空是让填的,如果写成mov word ptr [bx],0就把题目修 08/23 17:10
- [wildwind] 针对第二小题,鄙人认为立即数是可以直接送入内存单元的 08/23 11:24
- [gyq] 是的, 第1,第2个字节是零就行, 要加“,”。 08/13 10:58
- [jkuncle] 确实写错了,我太粗心了,谢谢你的提醒,应该是这样,jcxz ok,inc,bx,jmp short 08/13 09:07
- [jkuncle] 谢谢你的提醒,db是赋值一个字节的内容,但是我这里有三个字节,所以写得再多也是白赋值,是不是中间要写 08/13 08:48
- [gyq] 第一题博主的db 000000,功能只能是赋值0到7字节的第零个字节的值为0。 验证的话, 08/12 23:29
- [gyq] 博主检测点9.2写的不对:1,应该把inc bx写到jcxz ok后面;2,少了一句jmp shor 08/12 23:04
- [gyq] 赞 08/10 13:56
- [游客] 讲得很清楚唷 08/09 11:41
- [aben126] 我对这里有些看法。。。。 【 CPU将指令mov ds,ax读入缓冲器 执行指令 ip= 08/10 09:07
- [cutebe] 博主很仔细认真,向你学习。 07/18 21:46
[2014-08-12 21:52] 第9章实验及课后作业
阅读全文 |
评论次数(0) |
浏览次数(326) |
所属类型(汇编作业)
[2014-08-12 21:16] 检测点9.2.9.3
利用jcxz指令,实现在内存2000H段中查找第一个值为0的字节,找到后, 将它的偏移地址存储在dx中
由于jcxz指令的特点为cx=0的时候就跳到标号处,所以可以将内存单元中的值赋给cx,
assume cs:code
code segment
start:mov ax,2000H
mov ds,ax
mov bx,0
s:mov cl,[bx] 一个字节一个字节找,将ch归零,值赋给cl
mov ch,0
inc bx
jcxz ok 利用jcxz指令,如果找到第一个值为零的字节就跳转到ok
ok:mov dx,bx
mov ax,4c00h
int 21h...
由于jcxz指令的特点为cx=0的时候就跳到标号处,所以可以将内存单元中的值赋给cx,
assume cs:code
code segment
start:mov ax,2000H
mov ds,ax
mov bx,0
s:mov cl,[bx] 一个字节一个字节找,将ch归零,值赋给cl
mov ch,0
inc bx
jcxz ok 利用jcxz指令,如果找到第一个值为零的字节就跳转到ok
ok:mov dx,bx
mov ax,4c00h
int 21h...
阅读全文 |
评论次数(2) |
浏览次数(411) |
所属类型(汇编作业)
[2014-08-12 20:58] 检测点9.1
(1)程序如下
assume cs:code
data segment
?
data ends
code segment
start:mov ax,data
mov ds,ax
mov bx,0
jmp word ptr [bx+1]
code ends
end start
使程序中的jmp指令执行后cs:ip指向程式第一条指令
程式第一条指令的偏移量为0,也就是执行jmp指令后ip=0000
jmp word ptr [bx+1],让内存单元[1]的值为0000
所以可以在data段定义 db 000000,或者 db 3 dup (0)
(2)
a...
assume cs:code
data segment
?
data ends
code segment
start:mov ax,data
mov ds,ax
mov bx,0
jmp word ptr [bx+1]
code ends
end start
使程序中的jmp指令执行后cs:ip指向程式第一条指令
程式第一条指令的偏移量为0,也就是执行jmp指令后ip=0000
jmp word ptr [bx+1],让内存单元[1]的值为0000
所以可以在data段定义 db 000000,或者 db 3 dup (0)
(2)
a...
阅读全文 |
评论次数(5) |
浏览次数(434) |
所属类型(汇编作业)
[2014-08-06 17:43] 第8章课后作业
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,8000,16000,24486,50065,97479,140417,197514
dd 345980,590827,803530,1183000,1843000,2759000,3753000,46...
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,8000,16000,24486,50065,97479,140417,197514
dd 345980,590827,803530,1183000,1843000,2759000,3753000,46...
阅读全文 |
评论次数(2) |
浏览次数(476) |
所属类型(汇编作业)
[2013-07-10 16:09] 第7章课后作业
7.4,将datasg中的第一个字符串转化为大写,第二个字符串转化为小写
要将字符串转化,首先要定位字符串的位置和长度,再是执行转化
第一个字符串在段地址为datasg,偏移量从0到4的内存单元中,
第二个字符串在段地址为datasg,偏移量从(5+0)到(5+10)的内存单元中,用and指令将字符串第5位置0,使字符串变为大写,用or指令将第5位置1,使字符串变为小写,
assume cs:codesg,ds:datasg
datasg segment
db 'BaSiC'
db 'iNfOrMaTiOn'
datasg ends
codesg segment
sta...
要将字符串转化,首先要定位字符串的位置和长度,再是执行转化
第一个字符串在段地址为datasg,偏移量从0到4的内存单元中,
第二个字符串在段地址为datasg,偏移量从(5+0)到(5+10)的内存单元中,用and指令将字符串第5位置0,使字符串变为大写,用or指令将第5位置1,使字符串变为小写,
assume cs:codesg,ds:datasg
datasg segment
db 'BaSiC'
db 'iNfOrMaTiOn'
datasg ends
codesg segment
sta...
阅读全文 |
评论次数(0) |
浏览次数(352) |
所属类型(汇编作业)
[2013-07-10 13:27] 第7章的一些胡乱总结
and,or,百度查得的含义如下
and,当且仅当两操作数对应的位为真时(就是等于1),结果为真,否则为假(等于0)
or,当且仅当两操作数对应的位为假时(等于0),结果为假,否则为真(等于1)
第7章王爽老师的几句话有必要抄下来:
如果一个问题的解决方案,使我们陷入一种矛盾之中,那么,很可能是我们考虑问题的出发点有了问题,或是说,我们起初运用的规律并不合适
寻址方式的适当应用,使我们可以以更合理的结构来看待所要处理的数据,而为所要处理的看似杂乱无章的数据设计一种清晰的数据结构是程序设计的一个关键的问题...
and,当且仅当两操作数对应的位为真时(就是等于1),结果为真,否则为假(等于0)
or,当且仅当两操作数对应的位为假时(等于0),结果为假,否则为真(等于1)
第7章王爽老师的几句话有必要抄下来:
如果一个问题的解决方案,使我们陷入一种矛盾之中,那么,很可能是我们考虑问题的出发点有了问题,或是说,我们起初运用的规律并不合适
寻址方式的适当应用,使我们可以以更合理的结构来看待所要处理的数据,而为所要处理的看似杂乱无章的数据设计一种清晰的数据结构是程序设计的一个关键的问题...
阅读全文 |
评论次数(0) |
浏览次数(392) |
所属类型(默认类型)
[2013-07-07 23:12] 关于第六章实验任务第二题第4小问
对于如下定义的段,
name segment
...
name ends
如果段中的数据占N个字节,程序加载后,该段的实际占有空间为
答案不是N个字节,答案为 (N/16+1)*16 单位为字节,或者 (N+15)/16,单位为节(16字节称为一个节),具体分析在汇编论坛找到了详细的答案,这里我厚着脸皮复制粘贴过来跟大家分享,原文地址是
http://www.asmedu.net/bbs/pasteinfo.jsp?part=1&level=book&kind=1007&qkSg=2&qID=67937&readSg=1
下面是详细分析
对于如下定义的段:
...
name segment
...
name ends
如果段中的数据占N个字节,程序加载后,该段的实际占有空间为
答案不是N个字节,答案为 (N/16+1)*16 单位为字节,或者 (N+15)/16,单位为节(16字节称为一个节),具体分析在汇编论坛找到了详细的答案,这里我厚着脸皮复制粘贴过来跟大家分享,原文地址是
http://www.asmedu.net/bbs/pasteinfo.jsp?part=1&level=book&kind=1007&qkSg=2&qID=67937&readSg=1
下面是详细分析
对于如下定义的段:
...
阅读全文 |
评论次数(0) |
浏览次数(369) |
所属类型(默认类型)
[2013-07-07 22:42] 第六章实验任务
assume cs:code,ds:data,ss:stack
data segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
data ends
stack segment
dw 0,0,0,0,0,0,0,0
stack ends
code segment
start: mov ax,stack
mov ss,ax
mov sp,16
mov ax,data
mov ds,ax
push ds:[0]
push ds:[2]
pop ds:[2]
pop ...
data segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
data ends
stack segment
dw 0,0,0,0,0,0,0,0
stack ends
code segment
start: mov ax,stack
mov ss,ax
mov sp,16
mov ax,data
mov ds,ax
push ds:[0]
push ds:[2]
pop ds:[2]
pop ...
阅读全文 |
评论次数(0) |
浏览次数(359) |
所属类型(汇编作业)
[2013-07-07 20:54] 第六章课后作业
检测点6.1
1.下面的程式实现依次用内存0:0-0:15单元中的内容改写程式中的数据,完成程式:
要传送的数据在哪里,要传送到哪里去,有多长
要传送的数据在内存单元0:0-0:15单元中,以段地址为0,偏移量为0-15的一段内存空间,用bx记录偏移量
要传送到哪里去,传送到程式中,程式中的数据地址如何定位,段地址为CS,偏移量为0-f,大小为8个字单元,16个字节,用循环实现,一次传送一个字,要传送8次
assume cs:codesg
codesg segment
;定义8个字单元的数据,也可以说开辟8个字单元空间
dw 0123h,0456h,...
1.下面的程式实现依次用内存0:0-0:15单元中的内容改写程式中的数据,完成程式:
要传送的数据在哪里,要传送到哪里去,有多长
要传送的数据在内存单元0:0-0:15单元中,以段地址为0,偏移量为0-15的一段内存空间,用bx记录偏移量
要传送到哪里去,传送到程式中,程式中的数据地址如何定位,段地址为CS,偏移量为0-f,大小为8个字单元,16个字节,用循环实现,一次传送一个字,要传送8次
assume cs:codesg
codesg segment
;定义8个字单元的数据,也可以说开辟8个字单元空间
dw 0123h,0456h,...
阅读全文 |
评论次数(0) |
浏览次数(332) |
所属类型(汇编作业)
[2013-07-06 17:45] 第五章课后作业
1.编程,向内存0:200-0:23F依次传送数据0-63(3FH)
(1)要复制的是什么,从哪里到哪里
向内存单元传送数据,首先要定位内存单元的地址,0:200-0:23F可以看成是段地址为0,偏移地址为200-23F的一段连续的内存空间,可以表示为200H+(0)-200H+(3F),编译器在对200和200H时有不同的表现,程式里的200在编译后会变为C8,200H编译后是200
其次要定位要传送的数据在哪里,有多长,这里是传送0-63,可以用一个8位寄存器保存,长度为3FH,程式用循环实现,每次复制一个字节,一共复制64次
assume cs:code
code s...
(1)要复制的是什么,从哪里到哪里
向内存单元传送数据,首先要定位内存单元的地址,0:200-0:23F可以看成是段地址为0,偏移地址为200-23F的一段连续的内存空间,可以表示为200H+(0)-200H+(3F),编译器在对200和200H时有不同的表现,程式里的200在编译后会变为C8,200H编译后是200
其次要定位要传送的数据在哪里,有多长,这里是传送0-63,可以用一个8位寄存器保存,长度为3FH,程式用循环实现,每次复制一个字节,一共复制64次
assume cs:code
code s...
阅读全文 |
评论次数(0) |
浏览次数(362) |
所属类型(汇编作业)
『 查看更多文章 』