研究实验5
(1)
C代码
void showchar(char a,int b);
main()
{
showchar('a',2);
}
void showchar(char a,int b)
{
*(char far *)(0xb8000000+160*10+80)=a;
*(char far *)(0xb8000000+160*10+81)=b;
}
在程序中 DS,ES SS段相同
是用堆栈传值,改变堆栈的指向来取得压入的要传送的值
如下 ‘a’ 61 压入后 在取出前又压入2次 则bp+4就回到 61压入的内存位置
汇编部份代码
...



- [游客] 支持高手!! 10/19 22:00
- [77919588410] 顶起... 10/22 22:00
- [matraxa] 顶!顶!顶!!! 10/20 19:32
- [wzp1990] 顶!!! 10/11 15:51
- [liohao] 写MBR呀 我怕把硬盘给整坏了 支持高手 09/27 16:53
- [qiou_fong] 牛人。牛人。牛人。。。 07/12 17:35
- [xixihaha] 膜拜lz 04/21 22:30
- [游客] 牛人呀 04/06 16:18
- [qixiluopan] 我才刚开始学呢 有空教教啊 03/23 12:20
- [feng_bird2010] 牛B 03/18 21:24
- [even3] 亲,你好。。。这边有一个汇编语言程序,但是就是不知道哪里出了问题,问了很多人,都不知道想麻烦您一下, 05/16 20:47
- [pascale] 别看谭浩强的书, 这本书变得其实不好知识他比较全罢了。 他对编写C语言的思想和老美的差远了。 我建议 01/01 08:40
[2009-08-02 22:05] 研究实验5
阅读全文 |
评论次数(2) |
浏览次数(824) |
所属类型(汇编作业)
[2009-07-28 18:00]
我自己写的双启动详细实现(代码+注解)
A)=========安装双系统:(用Virtual PC)============
步骤:
1先装1个系统
2 把D盘转为主(PQ中设),同时把这个设为主(我是在FDSIK下设的D为A主,在DOS下显示时C:就是显的原来D盘了)
3 安装第2个系统
4 运行自己写的代码
B)============代码写的步骤============
1,先把原系统中MBR,复制到不用扇区
2,再写在写MBR时(注意后4个字节.)选择并跳出 0:7C00送行.好在选择完成后重载原来MBR
3,对于重载的原来MBR 对要启的分区表 头设80H,其它设0.一份在1BE ...
步骤:
1先装1个系统
2 把D盘转为主(PQ中设),同时把这个设为主(我是在FDSIK下设的D为A主,在DOS下显示时C:就是显的原来D盘了)
3 安装第2个系统
4 运行自己写的代码
B)============代码写的步骤============
1,先把原系统中MBR,复制到不用扇区
2,再写在写MBR时(注意后4个字节.)选择并跳出 0:7C00送行.好在选择完成后重载原来MBR
3,对于重载的原来MBR 对要启的分区表 头设80H,其它设0.一份在1BE ...
阅读全文 |
评论次数(18) |
浏览次数(5513) |
所属类型(汇编作业)
[2009-07-21 11:43] 研究实验4
(1)
1 连接出问题
2 在 C0s模式下没定义_main
3 很有可能与C0S.obj 有关
(2)
1 共 1d个字节
2 不能正常返回 没有 ah=4c int 21h
3 f函数偏移地址是0
(3)
1代码有0EB8H
2 能正常返回
3 F中在返回后,最后一条是MOV [008C],BX 而M中则是RET
(4)
1 调用的偏移地址是 11ah
2 在偏移地址 151h处 mov ah,4c 156H int 21
(5)
1 应当是在TC LINK 时生成的
2 应当是,因为C0S.OBJ 是必须的文件,同时 同样的MASM 和TC2的L...
1 连接出问题
2 在 C0s模式下没定义_main
3 很有可能与C0S.obj 有关
(2)
1 共 1d个字节
2 不能正常返回 没有 ah=4c int 21h
3 f函数偏移地址是0
(3)
1代码有0EB8H
2 能正常返回
3 F中在返回后,最后一条是MOV [008C],BX 而M中则是RET
(4)
1 调用的偏移地址是 11ah
2 在偏移地址 151h处 mov ah,4c 156H int 21
(5)
1 应当是在TC LINK 时生成的
2 应当是,因为C0S.OBJ 是必须的文件,同时 同样的MASM 和TC2的L...
阅读全文 |
评论次数(5) |
浏览次数(433) |
所属类型(汇编作业)
[2009-07-20 16:08] 研究实验3
P331
(1)
char 传到DS:偏移。char 后直接数值就用的 mov 内存。如果是AX,转为BX,再[BX]
char far 先将前面设在ES 后面用在ES的偏移
(2)
main()
{
_BX=160*12+40*2;
*(char far *)(0xb8000000+_BX)='a';
*(int far *)(0xb8000000+_BX+1)=2;
}
(3)
编译显示警告啊 在函数内定义的变量提示 不会被使用啊,这是为什么啊,会出什么问题啊
全局变量代码段中在前部 1A6和以后 局部变量放在堆栈内的
push bp mov ...
(1)
char 传到DS:偏移。char 后直接数值就用的 mov 内存。如果是AX,转为BX,再[BX]
char far 先将前面设在ES 后面用在ES的偏移
(2)
main()
{
_BX=160*12+40*2;
*(char far *)(0xb8000000+_BX)='a';
*(int far *)(0xb8000000+_BX+1)=2;
}
(3)
编译显示警告啊 在函数内定义的变量提示 不会被使用啊,这是为什么啊,会出什么问题啊
全局变量代码段中在前部 1A6和以后 局部变量放在堆栈内的
push bp mov ...
阅读全文 |
评论次数(5) |
浏览次数(476) |
所属类型(汇编作业)
[2009-07-18 17:54] 研究实验2
(2)思考:MIAN肯定是在代码段。通过观测寄存器BX=1 CX=2来判断,如果不是就是还没到,如果是就是过了,一步步缩小范围。用P试了N下,发现太慢就用 P 数字。发现在 1FA处。这个方法很好啊,是可以用来 破解别人的好方法,我认为。
P90过了,P89未到,就在P89处改用T单步
(3)思考:我是样想的,MAIN(){}是对应汇编的子程序,所以写C语言的哥哥一定是把MAIN写汇编中的标号,所以MAIN对应的是子程序入口地址,而printf又是一段打字字符的子程序(这个子程序一定能实现对后面数或字符的显示输出)
(5)我在main(){} 和 f(void){}都加上了p...
P90过了,P89未到,就在P89处改用T单步
(3)思考:我是样想的,MAIN(){}是对应汇编的子程序,所以写C语言的哥哥一定是把MAIN写汇编中的标号,所以MAIN对应的是子程序入口地址,而printf又是一段打字字符的子程序(这个子程序一定能实现对后面数或字符的显示输出)
(5)我在main(){} 和 f(void){}都加上了p...
阅读全文 |
评论次数(2) |
浏览次数(396) |
所属类型(汇编作业)
[2009-07-18 17:51] 研究实验1
思考:1)我们是以问题或目标出发 2)先用必要的文件或步骤或涉及的区域 3)根据返回的结果(错误提示)不断修正,缩小范围,以达到目的。...
阅读全文 |
评论次数(1) |
浏览次数(381) |
所属类型(汇编作业)
[2009-07-13 20:07] 课程设计2 终于免强完成
代码太多,没精简,用了3个扇区.我基本是按自己想法一点点写,所以用的SUB过程较少,同时时间输入缺少对月日时分秒的输入正确性验证.光标也未跟随.
assume cs:code
code segment
org 7c00h ;因为安装的程序会放入0:7C00H处,所以这样本程序对标号调用的偏移和安装后实际调用偏移一致
start:
;*****************DESIGN2引导程序主程序*********************
;DESIGN初始化操作
mov ax,cs
mov ds,ax
mov es,ax
mov ss,ax
mov s...
assume cs:code
code segment
org 7c00h ;因为安装的程序会放入0:7C00H处,所以这样本程序对标号调用的偏移和安装后实际调用偏移一致
start:
;*****************DESIGN2引导程序主程序*********************
;DESIGN初始化操作
mov ax,cs
mov ds,ax
mov es,ax
mov ss,ax
mov s...
阅读全文 |
评论次数(2) |
浏览次数(451) |
所属类型(汇编作业)
[2009-07-09 10:26] 检测点17.1
我认INT16中断一定有设置IF=1指令。我认为对
因为调用INT16,进入INT中断后 IF=0 TF=0。如果些时键盘缓冲区无数据则程序将在
INT16中不出来,要等到键盘缓冲区有数据。而键盘缓冲区需要按键并且,调用INT9才能
在键盘缓冲区存入数据。所以如果INT16内没设IF=1。则将在INT16中进入死循环,无法跳出来...
因为调用INT16,进入INT中断后 IF=0 TF=0。如果些时键盘缓冲区无数据则程序将在
INT16中不出来,要等到键盘缓冲区有数据。而键盘缓冲区需要按键并且,调用INT9才能
在键盘缓冲区存入数据。所以如果INT16内没设IF=1。则将在INT16中进入死循环,无法跳出来...
阅读全文 |
评论次数(1) |
浏览次数(409) |
所属类型(汇编作业)
[2009-07-08 20:45] 实验16 安装中断7CH,调用更改屏幕前背景色等
ASSUME CS:CODES
CODES SEGMENT
START:
;安装新INT7CH到 0:200h
MOV AX,CS
MOV DS,AX
MOV SI,SETSCREEN;DS:SI源的指定
MOV AX,0
MOV ES,AX
MOV DI,200H;目标的ES:DI的指定
CLD;正向
MOV CX,OFFSET SETSCREEN_END-OFFSET SETSCREEN;长度
RE...
CODES SEGMENT
START:
;安装新INT7CH到 0:200h
MOV AX,CS
MOV DS,AX
MOV SI,SETSCREEN;DS:SI源的指定
MOV AX,0
MOV ES,AX
MOV DI,200H;目标的ES:DI的指定
CLD;正向
MOV CX,OFFSET SETSCREEN_END-OFFSET SETSCREEN;长度
RE...
阅读全文 |
评论次数(2) |
浏览次数(402) |
所属类型(汇编作业)
[2009-07-07 15:22] 检测点 16.2
MOV AX,DATA
MOV ES,AX...
MOV ES,AX...
阅读全文 |
评论次数(0) |
浏览次数(328) |
所属类型(汇编作业)