- [chinatree] 支持,下面或许我也需要跟上你的步伐了. 11/03 00:27
- [redhat0921] 为了玩游戏时候做外挂自己用,起来的兴趣 10/16 13:12
- [游客] 不错 10/12 16:14
- [rotapple] 哦这样,我去下载个电子书看下。 10/09 15:20
- [rotapple] 你装virtual box或者virtual machine,然后把DOS系统装到这两个软件其中之一 10/09 15:18
- [stqcw] 虚拟机也没有软盘 一运行kechengsheji2.asm就出错 因为没有软盘 09/26 14:50
- [stqcw] 我电脑上没有 软盘 我是在xp系统里面装了一个dos6.22 的虚拟机 09/26 13:36
- [chinatree] 因为多线程用的是保护模式下的Cpu,而且由windows来控制把cpu分成1个个时间段,每个线程基本 09/26 12:34
- [rotapple] 楼上的同学。。。kecheng2.asm这个我不知道是什么东西哦。是王爽老师书上的课程设计2吗? 09/26 11:11
- [rotapple] 为了了解程序设计语言的底层原理. 最早是出于对java程序中多线程的原理的疑问. ======= 09/26 11:03
[2011-10-09 17:23] 整本书已完成学习,开始学习罗云彬的WIN32汇编程序设计第2版
如题。。。...
阅读全文 |
评论次数(1) |
浏览次数(1114) |
所属类型(默认类型)
[2011-10-09 17:19] 综合研究
这一章我只进行了选择性性的分析,这里只写出答案了。具体的大家可以自己去尝试。
(3)用下面的方法打印出ur1.exe被加载运行时,main函数在代码段中的偏移地址:
main(){ printf("%x\n", main); }
结果为main的偏移地址是0x1fa
问题:C语言将全局变量存放在哪里?将局部变量存放在哪里?每个函数开头的push bp mov bp sp有何含义?
全局变量存在了分配的ds段,局部变量存放到了分配的ss段,每个函数开头的两句是为了使用栈分配临时变量而保存现场(参见附注4)。
(4)用Debug对m.exe进行跟踪:1,找到对main函数进行调...
(3)用下面的方法打印出ur1.exe被加载运行时,main函数在代码段中的偏移地址:
main(){ printf("%x\n", main); }
结果为main的偏移地址是0x1fa
问题:C语言将全局变量存放在哪里?将局部变量存放在哪里?每个函数开头的push bp mov bp sp有何含义?
全局变量存在了分配的ds段,局部变量存放到了分配的ss段,每个函数开头的两句是为了使用栈分配临时变量而保存现场(参见附注4)。
(4)用Debug对m.exe进行跟踪:1,找到对main函数进行调...
阅读全文 |
评论次数(0) |
浏览次数(839) |
所属类型(汇编作业)
[2011-09-23 16:47] 突然想到一个问题,大家是为了什么而学汇编?
如题。...
阅读全文 |
评论次数(7) |
浏览次数(1176) |
所属类型(默认类型)
[2011-09-22 14:31] 第17章 课程设计2
首先写感想。
这是书上的最后一个设计了,也标志着我胜利了。
很有感触。
这段时间工作上手头很多事情所以没来汇编网,现在把弄好的设计发上来。
我把代码做了兼容(具体的修改方法见代码内),方便在本地运行以及虚拟机环境运行,但是整个代码没有做精简和优化,所以优化的余地非常大,不过这是后话了,现在也懒的去精简了。
另外代码内使用了一个新的伪指令equ,作用是定义一个常量,在编译时自动替换为数据,如:
CHR_A equ 32
mov ax,CHR_A
在编译时就是等于mov ax,32
其它的就没有新的了,都是书中学过的。
完成此设计的我的步骤:
1,写好大的主框架
2...
这是书上的最后一个设计了,也标志着我胜利了。
很有感触。
这段时间工作上手头很多事情所以没来汇编网,现在把弄好的设计发上来。
我把代码做了兼容(具体的修改方法见代码内),方便在本地运行以及虚拟机环境运行,但是整个代码没有做精简和优化,所以优化的余地非常大,不过这是后话了,现在也懒的去精简了。
另外代码内使用了一个新的伪指令equ,作用是定义一个常量,在编译时自动替换为数据,如:
CHR_A equ 32
mov ax,CHR_A
在编译时就是等于mov ax,32
其它的就没有新的了,都是书中学过的。
完成此设计的我的步骤:
1,写好大的主框架
2...
阅读全文 |
评论次数(12) |
浏览次数(1762) |
所属类型(汇编作业)
[2011-09-07 14:36] 实验17 编写包含多个功能子程序的中断例程
安装一个带有子程序的中断例程最需要注意的地方是定址表的偏移。
如果直接写table dw flag1,flag2那么它是相对于原CS的偏移,复制到0:200之后这个值必然是错的。所以在写定址表的时候需要注意计算。
我的虚拟软盘的原始数据内容如下图:
[img]multimedia/rotapple/images/pic_1315376818828.jpg[/img]
测试读取0面0道1扇区的512个字节之指定的es:0之后内存结果如下图:
mov ax,tempsg
mov es,ax
mov bx,0 ;读至目标tempsg:0
mov dx,0 ;从0面0道1扇...
如果直接写table dw flag1,flag2那么它是相对于原CS的偏移,复制到0:200之后这个值必然是错的。所以在写定址表的时候需要注意计算。
我的虚拟软盘的原始数据内容如下图:
[img]multimedia/rotapple/images/pic_1315376818828.jpg[/img]
测试读取0面0道1扇区的512个字节之指定的es:0之后内存结果如下图:
mov ax,tempsg
mov es,ax
mov bx,0 ;读至目标tempsg:0
mov dx,0 ;从0面0道1扇...
阅读全文 |
评论次数(1) |
浏览次数(927) |
所属类型(汇编作业)
[2011-09-05 15:56] 我错了。。。关于17.3字符串输入
一开始以为文章里面的top有2个功能。
1,它代表地址
2,它指向一个内存数据
charpush:
mov bx,top
mov [si][bx],al
inc top
jmp sret
和
charpop:
cmp top,0
je sret
dec top
mov bx,top
mov al,[si][bx]
jmp sret
被我理解为:
1) 赋bx值为top的地址偏移。然后AL值传给该地址
2) cmp top让我理解为取top指向的值来和0对比。
其实第...
1,它代表地址
2,它指向一个内存数据
charpush:
mov bx,top
mov [si][bx],al
inc top
jmp sret
和
charpop:
cmp top,0
je sret
dec top
mov bx,top
mov al,[si][bx]
jmp sret
被我理解为:
1) 赋bx值为top的地址偏移。然后AL值传给该地址
2) cmp top让我理解为取top指向的值来和0对比。
其实第...
阅读全文 |
评论次数(1) |
浏览次数(888) |
所属类型(默认类型)
[2011-08-31 14:53] 第17章 检测点17.1
“在int 16h中断例程中,一定有设置IF=1的指令。”这种说法对吗?
分析:
int16h所做的事:
1) 检测键盘缓冲区中是否有数据;
2) 没有则继续做第1步;
3) 读取缓冲区第一个字单元中的键盘输入;
4) 将读取的扫描码送入ah,ASCII码送入al;
然后书上提到了int9h中断例程和int16h中断例程是一对相互配合的程序,int9h生产,int16h则消费。
那么。
在int16h做事的时候,如果缓冲区没有按键,则一直1->2->1->2这么一直循环等待缓冲区有按键值,此时如果我们不把IF设为1,那么int19h例程如何被执行?
所以答案:这...
分析:
int16h所做的事:
1) 检测键盘缓冲区中是否有数据;
2) 没有则继续做第1步;
3) 读取缓冲区第一个字单元中的键盘输入;
4) 将读取的扫描码送入ah,ASCII码送入al;
然后书上提到了int9h中断例程和int16h中断例程是一对相互配合的程序,int9h生产,int16h则消费。
那么。
在int16h做事的时候,如果缓冲区没有按键,则一直1->2->1->2这么一直循环等待缓冲区有按键值,此时如果我们不把IF设为1,那么int19h例程如何被执行?
所以答案:这...
阅读全文 |
评论次数(3) |
浏览次数(984) |
所属类型(汇编作业)
[2011-08-31 10:20] 第16章 实验16 编写包含多个功能子程序的中断例程(细节分析及源码)
此题需要编写一个包含4个功能的7ch中断例程,包含:
1,清屏 2,设置前景色 3,设置背景色 4,向上滚动一行
分析:
此实验程序代码倒不是很难,因为在16.4章已经将程序代码全部给出。
此题考的就是对细节的考虑及处理:
1,这4个功能代码的大小
2,例程安装至0:200-0:2ff的256字节内,是否放得下?
3,子程序对传递的参数范围的检查及处理
对于问题1,咋一看,代码非常之长,大小我们先不管,因为计算麻烦。可以确定的是,这4个功能的代码非常长,也有点大。
对于问题2,给出的空间只有256字节空间,可以肯定的是:代码放不下!就算是放得下,以后要增加子功能呢?增...
1,清屏 2,设置前景色 3,设置背景色 4,向上滚动一行
分析:
此实验程序代码倒不是很难,因为在16.4章已经将程序代码全部给出。
此题考的就是对细节的考虑及处理:
1,这4个功能代码的大小
2,例程安装至0:200-0:2ff的256字节内,是否放得下?
3,子程序对传递的参数范围的检查及处理
对于问题1,咋一看,代码非常之长,大小我们先不管,因为计算麻烦。可以确定的是,这4个功能的代码非常长,也有点大。
对于问题2,给出的空间只有256字节空间,可以肯定的是:代码放不下!就算是放得下,以后要增加子功能呢?增...
阅读全文 |
评论次数(0) |
浏览次数(827) |
所属类型(汇编作业)
[2011-08-30 17:02] 第16章 检测点16.2
下面的程序将data段中的a处的8个数据累加,结果存储到b处的字中,补全程序。
assume cs:code, es:data
data segment
a db 1,2,3,4,5,6,7,8
b dw 0
data ends
code segment
start:
mov ax,data ;填空1
mov es,ax ;填空2
mov si,0
mov cx,8
s: mov al,a[si]
mov ah,0
add b,ax
inc si
loop s
mov ax,4c00h
int 21...
assume cs:code, es:data
data segment
a db 1,2,3,4,5,6,7,8
b dw 0
data ends
code segment
start:
mov ax,data ;填空1
mov es,ax ;填空2
mov si,0
mov cx,8
s: mov al,a[si]
mov ah,0
add b,ax
inc si
loop s
mov ax,4c00h
int 21...
阅读全文 |
评论次数(0) |
浏览次数(794) |
所属类型(汇编作业)
[2011-08-30 16:36] 第16章 检测点16.1
下面的程序将code段中a处的8个数据累加,结果存储到b处的双字中,补全程序。
assume cs:code
code segment
a dw 1,2,3,4,5,6,7,8
b dd 0
start:
mov si,0
mov cx,8
s: mov ax,a[si] ;填空1
add word ptr b[0],ax ;填空2
adc word ptr b[2],0 ;填空3
add si,2 ;填空4
loop s
mov ax,4c00h
int 21h
code en...
assume cs:code
code segment
a dw 1,2,3,4,5,6,7,8
b dd 0
start:
mov si,0
mov cx,8
s: mov ax,a[si] ;填空1
add word ptr b[0],ax ;填空2
adc word ptr b[2],0 ;填空3
add si,2 ;填空4
loop s
mov ax,4c00h
int 21h
code en...
阅读全文 |
评论次数(0) |
浏览次数(835) |
所属类型(汇编作业)
『 查看更多文章 』