研究试验4 不用main函数编程
f.c
f()
{
*(char far*)(0xb8000000+160*10+80) = 'a';
*(char far*)(0xb8000000+160*10+81) = 2;
}
(1) 使用turbo C 2.0 无法连接 f.c
(2) 使用link.exe 进行连接、使用debug查看程序
(3)debug m.exe
-
m.c
:main
的偏移地址是01FAH
main()
{
*(char far*)(0xb8000000+160*10+80) = 'a';
*(char far*)(0xb8000000+160*10+81) = 2;
}
-
m.exe
与f.exe
机器码完全一致
(4)使用G命令
(5) 对main函数调用的指令和程序返回的指令是不是来自C0S.obj
C0S.obj
0 o O
零 小欧 大欧
(6)使用debug查看 c0s.exe
以及 m.exe
-
main
的偏移量是01fa
,在076A:011AH
处的确有一句call 01FA
,但是对比之下,我看不出来书上所说的两个.obj
一共进行连接,在何处连接?看不懂...
(8)tc.exe
将c0s.obj
与用户.obj
文件一同进行连接
《汇编语言(第三版)》研究试验4 :324页
使用自己的 c0s.asm 编译生成c0s.obj 编程时可以不写main函数
assume cs:code
data segment
db 128 dup (0)
data ends
code segment
start: mov ax,data
mov ds,ax
mov ss,ax
mov sp,128
call s
mov ax,4c00H
int 21h
s:
code ends
end start
-
masm c0s.asm
生成c0s.obj
替换原本的 c0s.obj
文件,我遇到无法编译的问题,于是手动删除了原本的 c0s.obj 文件
,把新的ASM
文件名改成C.asm
就可以顺利编译,然后生成了一个C.OBJ
文件,然后将这个C.OBJ
文件改名为c0s.obj
fbuf.exe 向安全的内存空间写入 "a~h"
#define Buffer ((char *)*(int far*)0x200)
f()
{
Buffer = 0;
Buffer[10] = 0;
while(Buffer[10]!=8) {
Buffer[Buffer[10]] = 'a' + Buffer[10];
Buffer[10]++;
}
}
- 存疑:fbuf.exe 但是为什么是写到这里?