[098][汇编语言]研究试验4 不用main函数编程

研究试验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查看程序

(2)用debug观察 f 程序.png

(3)debug m.exe

  • m.c: main的偏移地址是01FAH
main()
{
    *(char far*)(0xb8000000+160*10+80) = 'a';
    *(char far*)(0xb8000000+160*10+81) = 2;
}
  • m.exef.exe 机器码完全一致
    (3) debug m.exe 观察机器码.png

(4)使用G命令

(4)G命令.png

(5) 对main函数调用的指令和程序返回的指令是不是来自C0S.obj

C0S.obj
0   o   O
零 小欧 大欧
(5)_main _exit 显示错误信息.png

(6)使用debug查看 c0s.exe 以及 m.exe

debug c0s.exe 调试.png
debug m.exe 调试.png
  • main的偏移量是 01fa ,在076A:011AH处的确有一句 call 01FA,但是对比之下,我看不出来书上所说的两个.obj一共进行连接,在何处连接?看不懂...

(8)tc.exec0s.obj用户.obj文件一同进行连接

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
使用自己编写的c0s.obj 调试f.exe.png
使用自己编写的c0s.obj 运行 f.exe 在屏幕中间显示绿色字符 a.png

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]++;
    }
}
'a' + Buffer[10] 对应机器码.png
Buffer[0] = 0 机器码.png
Buffer[10]!=8 机器码.png
Buffer[10]++ 机器码.png
fbuf.c 机器码 1.png
fbuf.c 机器码 2.png
fbuf.c 机器码 3.png
fbuf.c 机器码 4.png
fbuf.exe 但是为什么是写到这里?.png
  • 存疑:fbuf.exe 但是为什么是写到这里?
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。