研究实验4 不用main函数编程
(1)程序f.c的问题
①编译正常,连接出现错误。
②Linker Error:Undefined symbol '_main' in module COS
③这个错误信息可能与COS.OBJ相关。
(2)
f()
{
PUSH BP
MOV BP,SP
*(char far *)(0xb8000000+160*10+80)='a';
MOV BX,B800
MOV ES,BX
MOV BX,0690
MOV BYTE PTR ES:[BX],61
*(c...


- [gsyangchao] 继续努力啊! 10/09 11:42
- [游客] 下面的程序执行后,ax和bx中的数值为多少? (10.5的第二题) AX的值应该为1 NO 07/06 11:02
- [gsyangchao] 恩,很有问题。。。当时昏了没注意 03/15 21:29
- [游客] 看你的截图中,最后一列的数据 有些好像不大对啊? 呵呵! 03/11 11:19
- [游客] 怎么不发了啊...... 03/09 07:35
- [游客] 很受启发! 03/03 17:01
- [游客] 好强啊! 03/02 07:15
- [miaozaoyang] 哇,你好强啊! 都学这么多了! 我还在学汇编呢! 呵呵 厉害。。。 02/28 00:19
- [游客] 好像有排列、组合的问题。呵呵。好熟悉。 02/27 10:00
- [游客] 很好,继续加油啊! 02/24 11:30
- [njutyangxiao] 请问你在做第十七章时你的dos环境是如何搭配的,我发现在vmware下安装的dos无法共享文件夹,在 09/24 09:18
- [miaozaoyang] 我发现你学习的速度太快了! 由衷的佩服。。。。。。。 呵呵呵 02/02 16:20
- [miaozaoyang] 对,多谢你的提点了! 呵呵! 01/25 14:29
[2009-02-09 00:56] 综合研究4、5
阅读全文 |
评论次数(0) |
浏览次数(735) |
所属类型(汇编作业)
[2009-02-08 17:50] 综合研究1~3
研究实验1 搭建一个精简的C语言开发环境
研究结果:
必须用到的相关文件有5个,分别是:COS.OBJ、EMU.LIB、MATHS.LIB、GRAPHICS.LIB、CS.LIB。
研究实验2 使用寄存器
1.main函数的代码应该在code段中
2.通过打印main函数的偏移地址,发现结果为1FA.用Debug加载后找到了main函数汇编代码。
在printf语句中,main函数本身被调用,其入口偏移地址自然传递给printf函数被打印出来。
3.当main函数在调用void f(void)这个函数时,其汇编代码为 call 地址,验证了...
研究结果:
必须用到的相关文件有5个,分别是:COS.OBJ、EMU.LIB、MATHS.LIB、GRAPHICS.LIB、CS.LIB。
研究实验2 使用寄存器
1.main函数的代码应该在code段中
2.通过打印main函数的偏移地址,发现结果为1FA.用Debug加载后找到了main函数汇编代码。
在printf语句中,main函数本身被调用,其入口偏移地址自然传递给printf函数被打印出来。
3.当main函数在调用void f(void)这个函数时,其汇编代码为 call 地址,验证了...
阅读全文 |
评论次数(2) |
浏览次数(839) |
所属类型(汇编作业)
[2009-02-07 10:58] 课程设计2
assume cs:code
code segment
start:
;*****************************
;*********软盘安装程序********
;*****************************
mov al,3 ;扇区数
mov ah,3 ;写操作
mov ch,0 ;磁道号
mov cl,1 ;扇区号
mov dh,0 ;面
mov dl,0 ;驱动器号,0表示A
mov bx,offset boot
push cs
pop es ;es:bx指向要被写入的内存单元
i...
code segment
start:
;*****************************
;*********软盘安装程序********
;*****************************
mov al,3 ;扇区数
mov ah,3 ;写操作
mov ch,0 ;磁道号
mov cl,1 ;扇区号
mov dh,0 ;面
mov dl,0 ;驱动器号,0表示A
mov bx,offset boot
push cs
pop es ;es:bx指向要被写入的内存单元
i...
阅读全文 |
评论次数(3) |
浏览次数(963) |
所属类型(汇编作业)
[2009-02-06 16:56] 第17章 使用BIOS进行键盘输入和磁盘读写
检测点17.1
“在int 16h中断例程中,一定有设置IF=1的指令。”这种说法对吗?
答:我认为是正确的。CPU在进入中断例程时,首先就将IF和TF置零,而IF=0则屏蔽了键盘输入这种可屏蔽中断,一旦键盘缓冲区中没有数据,则CPU一直处于死等状态,从而无限制等待检测。只有将IF设置为1,允许键盘输入数据进入键盘缓冲区,int 16h才能继续进行。
实验17 编写包含多个功能子程序的中断例程
安装一个新的int 7ch中断例程,实现通过逻辑扇区号对软盘进行读写。
参数说明:
(1)用ah寄存器传递功能号:0表示读,1表示写;
(2)用bx寄存器传...
“在int 16h中断例程中,一定有设置IF=1的指令。”这种说法对吗?
答:我认为是正确的。CPU在进入中断例程时,首先就将IF和TF置零,而IF=0则屏蔽了键盘输入这种可屏蔽中断,一旦键盘缓冲区中没有数据,则CPU一直处于死等状态,从而无限制等待检测。只有将IF设置为1,允许键盘输入数据进入键盘缓冲区,int 16h才能继续进行。
实验17 编写包含多个功能子程序的中断例程
安装一个新的int 7ch中断例程,实现通过逻辑扇区号对软盘进行读写。
参数说明:
(1)用ah寄存器传递功能号:0表示读,1表示写;
(2)用bx寄存器传...
阅读全文 |
评论次数(2) |
浏览次数(840) |
所属类型(汇编作业)
[2009-02-04 19:45] 第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]
----
add word ptr b,ax
----------
adc word ptr b[2],0
-------------
add si,2
--
loop s
mov ax,...
下面的程序将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]
----
add word ptr b,ax
----------
adc word ptr b[2],0
-------------
add si,2
--
loop s
mov ax,...
阅读全文 |
评论次数(3) |
浏览次数(393) |
所属类型(汇编作业)
[2009-02-02 04:46] 第15章 外中断
检测点15.1
(1) 仔细分析一下上面的int 9中断例程,看看是否可以精简一下?
pushf
pushf
pop ax
and ah,11111100b
push ax
popf
call dword ptr ds:[0]
可以精简为:
pushf
---------------------
call dword ptr ds:[0]
---------------------
两条指令。
(2) 仔细分析上面程序中的主程序,看看有什么潜在的问题?
在主程序中,如果在执行设置int 9中断例程的段地址和偏移地址的指令之间发生了...
(1) 仔细分析一下上面的int 9中断例程,看看是否可以精简一下?
pushf
pushf
pop ax
and ah,11111100b
push ax
popf
call dword ptr ds:[0]
可以精简为:
pushf
---------------------
call dword ptr ds:[0]
---------------------
两条指令。
(2) 仔细分析上面程序中的主程序,看看有什么潜在的问题?
在主程序中,如果在执行设置int 9中断例程的段地址和偏移地址的指令之间发生了...
阅读全文 |
评论次数(1) |
浏览次数(365) |
所属类型(汇编作业)
[2009-02-01 09:00] 第十四章 端口
检测点14.1
(1)编程:读取CMOS RAM的2号单元的内容。
assume cs:code
code segment
start: mov al,2
out 70h,al
in al,71h ;7:03时测试显示al=03
mov ax,4c00h
int 21h
code ends
end start
(2)编程:向CMOS RAM的2号单元写入0
assume cs:code
code segment
start: mov al,2
out 70h,al
mov al,0
out 71h,al
in al,71h ...
(1)编程:读取CMOS RAM的2号单元的内容。
assume cs:code
code segment
start: mov al,2
out 70h,al
in al,71h ;7:03时测试显示al=03
mov ax,4c00h
int 21h
code ends
end start
(2)编程:向CMOS RAM的2号单元写入0
assume cs:code
code segment
start: mov al,2
out 70h,al
mov al,0
out 71h,al
in al,71h ...
阅读全文 |
评论次数(1) |
浏览次数(435) |
所属类型(汇编作业)
[2009-02-01 03:59] 实验13 编写、应用中断例程
(1)编写并安装int 7ch中断例程,功能为显示一个用0结束的字符串,中断例程安装在0:200处。
参数:(dh)=行号,(dl)=列号,(cl)=颜色,ds:si指向字符串首地址。
assume cs:code
code segment
start:
;********安装程序到内存********
mov ax,cs
mov ds,ax
mov si,offset show ;设置ds:si指向源地址
mov ax,0
mov es,ax
mov di,200h ;设置es:di指向目的地址
mov cx,offset show...
参数:(dh)=行号,(dl)=列号,(cl)=颜色,ds:si指向字符串首地址。
assume cs:code
code segment
start:
;********安装程序到内存********
mov ax,cs
mov ds,ax
mov si,offset show ;设置ds:si指向源地址
mov ax,0
mov es,ax
mov di,200h ;设置es:di指向目的地址
mov cx,offset show...
阅读全文 |
评论次数(1) |
浏览次数(467) |
所属类型(汇编作业)
[2009-02-01 00:49] 第13章 int指令
检测点13.1
(1)在上面的内容中,我们用7cH中断例程实现loop的功能,则上面的7cH中断例程所能进行的最大转移位移是多少?
答:因为是实现loop指令的功能,而loop指令对IP的修改范围为-128~127,所以最大转移位移为128(向前)。
(2)用7cH中断例程完成jmp near ptr s指令的功能,用bx向中断例程传送转移指令。
assume cs:code
data segment
db 'conversation',0
data ends
code segment
start:
;********安装程序到内存********
mov ...
(1)在上面的内容中,我们用7cH中断例程实现loop的功能,则上面的7cH中断例程所能进行的最大转移位移是多少?
答:因为是实现loop指令的功能,而loop指令对IP的修改范围为-128~127,所以最大转移位移为128(向前)。
(2)用7cH中断例程完成jmp near ptr s指令的功能,用bx向中断例程传送转移指令。
assume cs:code
data segment
db 'conversation',0
data ends
code segment
start:
;********安装程序到内存********
mov ...
阅读全文 |
评论次数(2) |
浏览次数(386) |
所属类型(汇编作业)
[2009-01-31 12:28] 第十二章 内中断
检测点12.1
(1)用Debug查看内存,情况如下:
0000:0000 68 10 A7 00 8B 01 70 00-16 00 9D 03 8B 01 70 00
则,3号中断源对应的中断处理程序的入口地址为:0070:018B.
(2)存储N号中断源对应的中断处理程序入口的偏移地址的内存单元的地址为:4N.
存储N号中断源对应的中断处理程序入口的段地址的内存单元的地址为:4N+2.
实验12 编写0号中断的处理程序
assume cs:code
code segment
start:
mov ax,cs
mov ds,ax
mo...
(1)用Debug查看内存,情况如下:
0000:0000 68 10 A7 00 8B 01 70 00-16 00 9D 03 8B 01 70 00
则,3号中断源对应的中断处理程序的入口地址为:0070:018B.
(2)存储N号中断源对应的中断处理程序入口的偏移地址的内存单元的地址为:4N.
存储N号中断源对应的中断处理程序入口的段地址的内存单元的地址为:4N+2.
实验12 编写0号中断的处理程序
assume cs:code
code segment
start:
mov ax,cs
mov ds,ax
mo...
阅读全文 |
评论次数(1) |
浏览次数(428) |
所属类型(汇编作业)