请进,王爽《汇编语言》教材的实验4
时间:2011-02-16
来源:互联网
各位好,王爽《汇编语言》教材的实验4,第3道习题如下:
,我的想法是要明确两点:
1)程序指令的起始地址
2)“mov ax,4c00h”之前代码的长度
,但是这些信息要在程序编译连接之后,使用debug载入内存才可以看到,显然在当前是无法确知的
或者只有先编译程序通过之后,使用debug得到以上两点信息,再重新编程
各位都有什么高见,请多指教,多谢了!!
引用
下面的程序的功能是将“mov ax,4c00h”之前的指令复制到内存0:200处,补全程序。上机调试,跟踪运行结果。
assume cs:code
code segment
mov ax,__
mov ds,ax
mov ax,0020h
mov es,ax
mov bx,0
mov cx,__
s:mov al,[bx]
mov es:[bx],al
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end
下面的程序的功能是将“mov ax,4c00h”之前的指令复制到内存0:200处,补全程序。上机调试,跟踪运行结果。
assume cs:code
code segment
mov ax,__
mov ds,ax
mov ax,0020h
mov es,ax
mov bx,0
mov cx,__
s:mov al,[bx]
mov es:[bx],al
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end
,我的想法是要明确两点:
1)程序指令的起始地址
2)“mov ax,4c00h”之前代码的长度
,但是这些信息要在程序编译连接之后,使用debug载入内存才可以看到,显然在当前是无法确知的
或者只有先编译程序通过之后,使用debug得到以上两点信息,再重新编程
各位都有什么高见,请多指教,多谢了!!
作者: slwj 发布时间: 2011-02-16
你没有用org设置起始偏移那么起始偏移就是0,如果你要得到代码长度可以放上两个label一减就知道了,如果你一定要提前知道具体数值那你可以生成lst文件就可以知道。
作者: manfeng 发布时间: 2011-02-16
这道题的目的就是锻炼编译+调试的基本使用方法。
作者: masmaster 发布时间: 2011-02-16
1、指令容量法
首先,在DEBUG下用A命令把"mov ax,4c00h"之前的指令输入到内存,如附图。输入时,cx可随意给个值,输入完毕,用loop指令的下一条指令的地址117减去100(17H),即为cx应该赋的值,即mov cx,17h
2、标号法
assume cs:code
code segment
Start:
mov ax,cs
mov ds,ax
mov ax,0020h
mov es,ax
mov bx,0
lea cx,Exit_Proc
sub cx,offset Start
s:mov al,[bx]
mov es:[bx],al
inc bx
loop s
Exit_Proc:
mov ax,4c00h
int 21h
code ends
end Start
----------------------------
assume cs:code
code segment
mov ax,(CS) ;因为要复制的内容是指令,所以,数据段应与代码段同段
mov ds,ax
mov ax,0020h
mov es,ax
mov cx,(17h) ;"mov ax,4c00h"之前的指令共23个字节
mov bx,0
s: mov al,[bx]
mov es:[bx],al
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end
有多少个字节?你如何知道要复制的字节的数量
复制的内容有23个字节,各指令字节数之和,要求熟悉常用指令的字节数。
本题使用的是指令容量法。若允许修改原程序,建议使用标号法。
首先,在DEBUG下用A命令把"mov ax,4c00h"之前的指令输入到内存,如附图。输入时,cx可随意给个值,输入完毕,用loop指令的下一条指令的地址117减去100(17H),即为cx应该赋的值,即mov cx,17h
2、标号法
assume cs:code
code segment
Start:
mov ax,cs
mov ds,ax
mov ax,0020h
mov es,ax
mov bx,0
lea cx,Exit_Proc
sub cx,offset Start
s:mov al,[bx]
mov es:[bx],al
inc bx
loop s
Exit_Proc:
mov ax,4c00h
int 21h
code ends
end Start
----------------------------
assume cs:code
code segment
mov ax,(CS) ;因为要复制的内容是指令,所以,数据段应与代码段同段
mov ds,ax
mov ax,0020h
mov es,ax
mov cx,(17h) ;"mov ax,4c00h"之前的指令共23个字节
mov bx,0
s: mov al,[bx]
mov es:[bx],al
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end
有多少个字节?你如何知道要复制的字节的数量
复制的内容有23个字节,各指令字节数之和,要求熟悉常用指令的字节数。
本题使用的是指令容量法。若允许修改原程序,建议使用标号法。
作者: znxllyuan 发布时间: 2011-02-16
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28