研究问题
(1)用C语言编程可以不用变量吗? 可以
(2)用C语言编程可以不用main函数吗?可以,但要改写c0s.obj文件的代码
(3)我们能写一个printf函数吗? 能
研究实验一 搭建一个精简的C语言开发环境
所需文件
TC.EXE
还缺少
COS.OBJ
EMU.LIB
MATHS.LIB
GRAPHICS.LIB
CS.LIB
研究实验二 使用寄存器
(2)main函数的代码在什么段中?
应该是代码段,通过cs和ds寄存器查看
用Debug怎么找到main函数的代码?
靠下一问的提示,用printf函数输出main函数的偏移...
- [chinatree] 没有最强 只有更强 07/19 09:10
- [nbaqqqq] 我也认为最小为1000.1H,但我还是不太明白你的思路,我觉得最小不就是让偏移地址最大,最大是FFF 01/30 15:21
- [nbaqqqq] ax=6246H 额,自己还一直没发现,谢谢你提醒。 01/30 15:15
- [nbaqqqq] 我看的是pdf的文档,不能复制的,都是手打的。 01/30 14:49
- [nbaqqqq] 自己记录的 01/30 14:48
- [a88510] 最小为1000.1H,因为片地址必须是16的倍数,所以这个只能增加到16的倍数,10001H要增加到 01/29 20:49
- [a88510] mov ax,cx ax=3A5AH cx=?? 01/29 20:43
- [a88510] = =加油,共勉,另外那些文字你是复制还是自己按书本手打的啊? 01/29 20:40
- [a88510] 想问一下,这个是你自己写的还是论坛自己记录的? 01/29 20:16
- [nbaqqqq] 没事,我贴作业本来就是为了让论坛的老师和同学帮忙指出我没能发现的错误。第二问我不太清楚,偏移地址最大 01/07 21:47
[2011-07-28 11:01] 综合研究
阅读全文 |
评论次数(0) |
浏览次数(635) |
所属类型(汇编作业)
[2011-07-18 23:21] 课程设计二代码
assume cs:code
code segment
;int13h入口参数:
;(ah)=int 13h的功能号(2表示读扇区3表示写扇区)
;(al)=读取/写入扇区数
;(ch)=磁道号
;(cl)=扇区号
;(dh)=磁头号(对于软盘即面号,因为一个面用一个磁头来读写)
;(dl)=驱动器号 软驱从0开始,0:软驱A,1:软驱B;
; 硬盘从80h开始,80h:硬盘C,81h:硬盘D
;es:bx指向接收从扇区读入数据的内存区
start: ;mov ax,offset start3end-offset start3
;先...
code segment
;int13h入口参数:
;(ah)=int 13h的功能号(2表示读扇区3表示写扇区)
;(al)=读取/写入扇区数
;(ch)=磁道号
;(cl)=扇区号
;(dh)=磁头号(对于软盘即面号,因为一个面用一个磁头来读写)
;(dl)=驱动器号 软驱从0开始,0:软驱A,1:软驱B;
; 硬盘从80h开始,80h:硬盘C,81h:硬盘D
;es:bx指向接收从扇区读入数据的内存区
start: ;mov ax,offset start3end-offset start3
;先...
阅读全文 |
评论次数(1) |
浏览次数(741) |
所属类型(汇编作业)
[2011-06-27 10:51] 实验16 编写包含多个功能子程序的中段例程
assume cs:code
code segment
int7ch:
jmp short set
table dw sub1,sub2,sub3,sub4
set: push bx
cmp ah,3 ;判断功能号是否大于3
ja sret
mov bl,ah
mov bh,0
add bx,bx ;根据ah中的功能号计算子程序在table表中的偏移
add bx,200H ;table表的绝对地址=200h+table的相对地址
add table[bx],200h ;子程序的绝对地址=相对地址+200h
call word ptr table[...
code segment
int7ch:
jmp short set
table dw sub1,sub2,sub3,sub4
set: push bx
cmp ah,3 ;判断功能号是否大于3
ja sret
mov bl,ah
mov bh,0
add bx,bx ;根据ah中的功能号计算子程序在table表中的偏移
add bx,200H ;table表的绝对地址=200h+table的相对地址
add table[bx],200h ;子程序的绝对地址=相对地址+200h
call word ptr table[...
阅读全文 |
评论次数(0) |
浏览次数(558) |
所属类型(汇编作业)
[2011-06-27 10:48] 监测点 16.1~16.2
监测点 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 b,ax
adc b[2],0
add si,2
loop s
mov ax,4c00h
int 21h
code ends
end start
检测点 16.2
assume cs:code,es:data
data segm...
下面的程序将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 b,ax
adc b[2],0
add si,2
loop s
mov ax,4c00h
int 21h
code ends
end start
检测点 16.2
assume cs:code,es:data
data segm...
阅读全文 |
评论次数(0) |
浏览次数(552) |
所属类型(汇编作业)
[2011-06-23 20:55] 实验 15
安装一个新的int 9中断例程,功能:在dos下,按下“A”键后,除非不再松开,如果松开,就显示满屏的”A”,其他的键照常处理。
assume cs:code
stack segment
db 128 dup(0)
stack ends
code segment
start: mov ax,stack
mov ss,ax
mov sp,128
push cs
pop ds
mov ax,0
mov es,ax
mov si,offset int9 ;设置ds:si指向源地址
mov di,204h ;设置es:di指向目的地址 ...
assume cs:code
stack segment
db 128 dup(0)
stack ends
code segment
start: mov ax,stack
mov ss,ax
mov sp,128
push cs
pop ds
mov ax,0
mov es,ax
mov si,offset int9 ;设置ds:si指向源地址
mov di,204h ;设置es:di指向目的地址 ...
阅读全文 |
评论次数(0) |
浏览次数(568) |
所属类型(汇编作业)
[2011-05-04 13:06] 监测点 15.1
(1)
可以精简为:
Pushf
Call dword ptr ds:[0]
(2)
.
.
.
cli ;设置if=0
;在中断向量表中设置新的int 9中断例程的入口地址
mov word ptr es:[9*4],offset int9
mov es:[9*4+2],cs
sti ;设置if=1
.
.
.
cli ;设置if=0
;将中断向量表中int 9中断例程的入口恢复为原来的地址
push ds:[0]
pop es:[9*4]
push ds:[2]
pop es:[9*4+2]
sti ;设置if...
可以精简为:
Pushf
Call dword ptr ds:[0]
(2)
.
.
.
cli ;设置if=0
;在中断向量表中设置新的int 9中断例程的入口地址
mov word ptr es:[9*4],offset int9
mov es:[9*4+2],cs
sti ;设置if=1
.
.
.
cli ;设置if=0
;将中断向量表中int 9中断例程的入口恢复为原来的地址
push ds:[0]
pop es:[9*4]
push ds:[2]
pop es:[9*4+2]
sti ;设置if...
阅读全文 |
评论次数(0) |
浏览次数(523) |
所属类型(汇编作业)
[2011-04-23 15:38] 实验14 访问CMOS RAM
;编程,以“年/月/日 时:分:秒“的格式,显示当前的日期、时间。
assume cs:code,ds:data
data segment
db 0,0,'/',0,0,'/',0,0," ",0,0,":",0,0,":",0,0,"$"
db 9,8,7,4,2,0 ;存放单元号
data ends
code segment
start: mov ax,data
mov ds,ax
mov bx,0 ;ds:bx指向数据段
mov cx,6
mov si,18 ;从18号单元开始存放单元号
s: mov al,ds:[si] ;读出单元号
cal...
assume cs:code,ds:data
data segment
db 0,0,'/',0,0,'/',0,0," ",0,0,":",0,0,":",0,0,"$"
db 9,8,7,4,2,0 ;存放单元号
data ends
code segment
start: mov ax,data
mov ds,ax
mov bx,0 ;ds:bx指向数据段
mov cx,6
mov si,18 ;从18号单元开始存放单元号
s: mov al,ds:[si] ;读出单元号
cal...
阅读全文 |
评论次数(0) |
浏览次数(529) |
所属类型(汇编作业)
[2011-04-23 15:37] 检测点14.1~14.2
检测点14.1
(1) 编程,读取CMOS RAM的2号单元的内容。
mov al,2
out 70H,al
in al,71H
(2)编程,向CMOS RAM的2号单元写入0.
mov al,2
out 70H,al
out al,71H
监测点 14.2
编程,用加法和移位指令计算(ax)=(ax)*10
提示:(ax)*10=(ax)*2+(ax)*8
mov ax,0fffH
shl ax,1
mov bx,0fffH
mov cl,3
shl bx,cl
add ax,bx...
(1) 编程,读取CMOS RAM的2号单元的内容。
mov al,2
out 70H,al
in al,71H
(2)编程,向CMOS RAM的2号单元写入0.
mov al,2
out 70H,al
out al,71H
监测点 14.2
编程,用加法和移位指令计算(ax)=(ax)*10
提示:(ax)*10=(ax)*2+(ax)*8
mov ax,0fffH
shl ax,1
mov bx,0fffH
mov cl,3
shl bx,cl
add ax,bx...
阅读全文 |
评论次数(0) |
浏览次数(534) |
所属类型(汇编作业)
[2011-04-15 21:25] 实验 13 编写、应用中断例程
(1)//7ch中断例程安装
assume cs:code
code segment
start: mov ax,cs
mov ds,ax
mov si,offset do7cH
mov ax,0
mov es,ax
mov di,200H
mov cx,offset do7cHend-offset do7cH
cld
rep movsb
mov ax,0
mov es,ax
mov word ptr es:[7cH*4],200H
mov word ptr es:[7cH*4+2],0
mov ax,4c00H
int 21...
assume cs:code
code segment
start: mov ax,cs
mov ds,ax
mov si,offset do7cH
mov ax,0
mov es,ax
mov di,200H
mov cx,offset do7cHend-offset do7cH
cld
rep movsb
mov ax,0
mov es,ax
mov word ptr es:[7cH*4],200H
mov word ptr es:[7cH*4+2],0
mov ax,4c00H
int 21...
阅读全文 |
评论次数(0) |
浏览次数(520) |
所属类型(汇编作业)
[2011-04-15 21:25] 监测点 13.2
判断下面说法的正误:
(1) 我们可以编程改变FFFF:0处的指令,使得CPU不去执行BIOS中的硬件系统检测和初始化程序。
答:错,因为向C0000~FFFFF中写入数据的操作是无效的,因为这等于改写只读存储器中的内容(only read)
(2)int 19h 中断例程,可以由DOS提供。
不可以,因为int 19h进行操作系统的引导,讲计算机交给操作系统控制。...
(1) 我们可以编程改变FFFF:0处的指令,使得CPU不去执行BIOS中的硬件系统检测和初始化程序。
答:错,因为向C0000~FFFFF中写入数据的操作是无效的,因为这等于改写只读存储器中的内容(only read)
(2)int 19h 中断例程,可以由DOS提供。
不可以,因为int 19h进行操作系统的引导,讲计算机交给操作系统控制。...
阅读全文 |
评论次数(0) |
浏览次数(552) |
所属类型(汇编作业)
『 查看更多文章 』