- [rexic] 第(5)小题可精简为: assume cs:code a segment db 1 11/14 21:38
- [rexic] 用本章的转移指令来完成 assume cs:code,ds:data data seg 10/12 11:10
- [rexic] 使用 'div 内存单元' 操作时, 一定要指定操作长度类型, 否则报错, 10/09 13:45
[2015-11-01 20:18] 实验16 编写包含多个功能子程序的中断例程
;安装一个新的int 7ch中断例程,为显示输出提供如下功能子程序。
;
; (1)清屏;
; (2)设置前景色;
; (3)设置背景色;
; (4)向上滚动一行。
;
; 入口参数说明如下
;
; (1)用ah寄存器传递功能号:0表示清屏,1表示设置前景色,2表示设置背景色,3表示向上滚动一行;
; (2)对于1、2号功能,用al传递颜色值,(al)∈{0,1,2,3,4,5,6,7}。
;
;
;在进行这个实验时,往往会参考16.4给出的代码(四个子程序和直接定址表功能选择程序)如果安装16.4给出的功能子程序的安装程序习惯采用下面图1安装结构会出问题,问题有两...
;
; (1)清屏;
; (2)设置前景色;
; (3)设置背景色;
; (4)向上滚动一行。
;
; 入口参数说明如下
;
; (1)用ah寄存器传递功能号:0表示清屏,1表示设置前景色,2表示设置背景色,3表示向上滚动一行;
; (2)对于1、2号功能,用al传递颜色值,(al)∈{0,1,2,3,4,5,6,7}。
;
;
;在进行这个实验时,往往会参考16.4给出的代码(四个子程序和直接定址表功能选择程序)如果安装16.4给出的功能子程序的安装程序习惯采用下面图1安装结构会出问题,问题有两...
阅读全文 |
评论次数(0) |
浏览次数(679) |
所属类型(实验)
[2015-11-01 13:24] 实验15 安装新的int9中断例程
;安装一个新的int 9中断例程,功能:在DOS下,按下“A”键后,除非不再松开,如果松开,就显示满屏幕的“A”,其他的键
;照常处理。
;提示,按下一个键时产生的扫描码称为通码,松开一个键产生的扫描码称为断码。断码=通码+80h。
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
...
;照常处理。
;提示,按下一个键时产生的扫描码称为通码,松开一个键产生的扫描码称为断码。断码=通码+80h。
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
...
阅读全文 |
评论次数(0) |
浏览次数(751) |
所属类型(实验)
[2015-11-01 13:18] 实验14 访问CMOS RAM
;编程,以“年/月/日 时:分:秒”的格式,显示当前的日期、时间。
;注意:CMOS RAM中存储着系统的配置信息,除了保存时间信息的单元
;外,不要向其他的单元中写入内容,否则将引起一些系统错误。
assume cs:code
code segment
begin:mov bx,9
mov si,7c0h ;屏幕中间,年开头,60×12+32×2
;=1984=7c0h
mov cx,6
push cx
s:push cx
mov al,bl
o...
;注意:CMOS RAM中存储着系统的配置信息,除了保存时间信息的单元
;外,不要向其他的单元中写入内容,否则将引起一些系统错误。
assume cs:code
code segment
begin:mov bx,9
mov si,7c0h ;屏幕中间,年开头,60×12+32×2
;=1984=7c0h
mov cx,6
push cx
s:push cx
mov al,bl
o...
阅读全文 |
评论次数(0) |
浏览次数(617) |
所属类型(实验)
[2015-10-26 15:37] 检测点14.2
编程,用加法和移位指令计算(ax)=(ax)*10
提示:(ax)*10=(ax)*2+(ax)*8
assume cs:code
code segment
start: mov bx,ax
shl ax,1 ;左移1位(ax)=(ax)*2
mov cl,3
shl bx,cl ;左移3位(bx)=(ax)*8
add ax,bx ;(ax)=(ax)*2+(ax)*8
mov ax,4c00h
int 21h
code ends ...
提示:(ax)*10=(ax)*2+(ax)*8
assume cs:code
code segment
start: mov bx,ax
shl ax,1 ;左移1位(ax)=(ax)*2
mov cl,3
shl bx,cl ;左移3位(bx)=(ax)*8
add ax,bx ;(ax)=(ax)*2+(ax)*8
mov ax,4c00h
int 21h
code ends ...
阅读全文 |
评论次数(0) |
浏览次数(576) |
所属类型(汇编作业)
[2015-10-26 15:30] 检测点14.1
(1)编程,读取CMOS RAM的2号单元内容。
assume cs:code
code segment
start: mov al,2 ;赋值al
out 70h,al ;将al送入端口70h
in al,71h ;从端口71h处读出单元内容
mov ax,4c00h
int 21h
code ends
end start
(2)编程,向CMOS RAM的2号单元写入0。
assume cs:code
code segment
start...
assume cs:code
code segment
start: mov al,2 ;赋值al
out 70h,al ;将al送入端口70h
in al,71h ;从端口71h处读出单元内容
mov ax,4c00h
int 21h
code ends
end start
(2)编程,向CMOS RAM的2号单元写入0。
assume cs:code
code segment
start...
阅读全文 |
评论次数(0) |
浏览次数(565) |
所属类型(汇编作业)
[2015-10-26 15:25] 检测点13.2
判断下面说法的正误:
(1)我们可以编程改变FFFF:0处的指令,使得CPU不去执行BIOS中的硬件系统检测和初始化程序。
答:错误,FFFF:0处是各类ROM的存储空间,其内容无法改变。
(2)int 19h中断例程,可以由DOS提供。
答:错误,先调用int 19h,后启动DOS。...
(1)我们可以编程改变FFFF:0处的指令,使得CPU不去执行BIOS中的硬件系统检测和初始化程序。
答:错误,FFFF:0处是各类ROM的存储空间,其内容无法改变。
(2)int 19h中断例程,可以由DOS提供。
答:错误,先调用int 19h,后启动DOS。...
阅读全文 |
评论次数(0) |
浏览次数(600) |
所属类型(汇编作业)
[2015-10-26 15:21] 检测点13.1
(1)32768
注:mov bx,offset s - offset se
这里s<se,所以理论上bx取负,有符号数有一位用于符号位,数值范围是:-32768~-?(取决于s和se标号之间语句长度),则最大转移位移取绝对值32768(真实值要比32768还小因为s和se标号之间语句长度是大于0的,无论如何它要比65500这个数小近一半)。...
注:mov bx,offset s - offset se
这里s<se,所以理论上bx取负,有符号数有一位用于符号位,数值范围是:-32768~-?(取决于s和se标号之间语句长度),则最大转移位移取绝对值32768(真实值要比32768还小因为s和se标号之间语句长度是大于0的,无论如何它要比65500这个数小近一半)。...
阅读全文 |
评论次数(0) |
浏览次数(553) |
所属类型(汇编作业)
[2015-10-24 17:34] 实验13 编写、应用中断例程
(3)下面的程序,分别在屏幕的第2、4、6、8行显示4句英文诗,补全程序。
assume cs:code
code segment
s1: db 'Good,better,best,','$'
s2: db 'Never let it rest,','$'
s3: db 'Till good is better,','$'
s4: db 'And better,best.','$'
s : dw offset s1,offset s2,offset s3,offset s4
row: db 2,4,6,8
start:mov ax,cs
...
assume cs:code
code segment
s1: db 'Good,better,best,','$'
s2: db 'Never let it rest,','$'
s3: db 'Till good is better,','$'
s4: db 'And better,best.','$'
s : dw offset s1,offset s2,offset s3,offset s4
row: db 2,4,6,8
start:mov ax,cs
...
阅读全文 |
评论次数(0) |
浏览次数(583) |
所属类型(实验)
[2015-10-24 17:33] 实验12 编写0号中断的处理程序
;编写0号中断的处理程序,使得在除法溢出发生时,在屏幕中间显示字符串"divide error!",然后返回到DOS
assume cs:code
code segment
begin:mov ax,cs ;设置ds:si指向源地址
mov ds,ax
mov si,offset do0
mov ax,0 ;设置es:di指向目标地址
mov es,ax
mov di,200h
mov cx,offset do0end-offset do0 ...
assume cs:code
code segment
begin:mov ax,cs ;设置ds:si指向源地址
mov ds,ax
mov si,offset do0
mov ax,0 ;设置es:di指向目标地址
mov es,ax
mov di,200h
mov cx,offset do0end-offset do0 ...
阅读全文 |
评论次数(0) |
浏览次数(515) |
所属类型(实验)
[2015-10-24 17:26] 实验11 编写子程序
;编写一个子程序,将包含任意字符,以0结尾的字符串中的小写字母转变成大写字母,描述如下。
;名称:letterc
;功能:将以0结尾的字符串中的小写字母转变成大写字母
;参数:ds:si指向字符串首地址
assume cs:codesg
datasg segment
db"Beginner's All-purpose Symbolic Instruction Code.",0
datasg ends
codesg segment
begin:mov ax,datasg
mov ds,ax
mov si,0
call...
;名称:letterc
;功能:将以0结尾的字符串中的小写字母转变成大写字母
;参数:ds:si指向字符串首地址
assume cs:codesg
datasg segment
db"Beginner's All-purpose Symbolic Instruction Code.",0
datasg ends
codesg segment
begin:mov ax,datasg
mov ds,ax
mov si,0
call...
阅读全文 |
评论次数(0) |
浏览次数(565) |
所属类型(实验)
『 查看更多文章 』