; 检测点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] ;mov ax, __
add word ptr b,ax ;add __ , ax
adc word ptr b[2],0 ;adc __ , 0
add si,2 ; add si,__
loop s
mov a...


- [tomato] 不懂博主14.2为什么要这么去写,直接操作寄存器ax不就可以了吗? 05/19 18:15
- [游客] 理解没问题。 05/08 17:07
- [游客] 对。 05/08 17:03
- [q470393267] mov bx,1 mov cx, 2000 s: 05/08 11:25
- [游客] 晕,程序返回的内容没写 05/07 14:48
- [wsrf] 程序不能正常返回,最熟悉的给忘写了。 05/06 21:34
- [ayonz] 向前移 2^15-1, 向后移2^15 ? 05/06 19:12
- [tomato] 看得出你的程序有问题,不妨自己上机实验验证结果! 05/04 14:12
- [tomato] Continue! 05/04 14:02
- [tomato] 第一题中,分方向,前移或者后移。 05/04 12:02
[2009-05-07 23:27] 第16章
阅读全文 |
评论次数(1) |
浏览次数(842) |
所属类型(汇编作业)
[2009-05-07 22:10] 实验15 (对照别人的程序,一样,可是没效果,请高手指点)
; 程序是按照15.5的例子改的
; 实验15 安装新的 int 9 中断例程
; 功能: 按下 "A"键后, 除非松开就显示满屏幕的"A"
; "A"断码 : 9EH
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
mov d...
; 实验15 安装新的 int 9 中断例程
; 功能: 按下 "A"键后, 除非松开就显示满屏幕的"A"
; "A"断码 : 9EH
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
mov d...
阅读全文 |
评论次数(1) |
浏览次数(916) |
所属类型(汇编作业)
[2009-05-07 21:42] 检测点15.1
1.仔细分析一下上面的 int 9 中断例程, 看看是否可以精简下?
其实在我们的 int 9 中断例程中, 模拟 int 指令调用原 int 9 中断例程的程序段是可以精简的, 因为在进入中断例程后, IF 和 TF 都已经置 0, 没有必要 再进行设置了. 对于程序段:
pushf
pushf
pop ax
and ah, 11111100b
push ax
popf
call dword ptr ds:[0]
可以精简为:
pushf
call dword ptr ds:[0]
两条指令.
2.仔细分析上面程序中的主程序,看看有什么潜在的问题...
其实在我们的 int 9 中断例程中, 模拟 int 指令调用原 int 9 中断例程的程序段是可以精简的, 因为在进入中断例程后, IF 和 TF 都已经置 0, 没有必要 再进行设置了. 对于程序段:
pushf
pushf
pop ax
and ah, 11111100b
push ax
popf
call dword ptr ds:[0]
可以精简为:
pushf
call dword ptr ds:[0]
两条指令.
2.仔细分析上面程序中的主程序,看看有什么潜在的问题...
阅读全文 |
评论次数(1) |
浏览次数(879) |
所属类型(汇编作业)
[2009-05-05 21:06] 实验 14 访问 CMOS RAM [已解决](时间有显示,但还是有弹出错误的窗口,)
; 实验 14 访问 CMOS RAM
; 以" 年/月/日 时:分:秒" 的格式,显示当前的日期, 时间
; 秒:0 分:2 时:4 日:7 月:8 年:9
assume cs:code
code segment
num: db '987420' ;日期时间位置
data: db '00/00/00 00:00:00','$'
start:
mov ax, cs
mov ds, ax
mov si, offset num
mov di, offset data
mov cx, 6
s:
push cx
mov a...
; 以" 年/月/日 时:分:秒" 的格式,显示当前的日期, 时间
; 秒:0 分:2 时:4 日:7 月:8 年:9
assume cs:code
code segment
num: db '987420' ;日期时间位置
data: db '00/00/00 00:00:00','$'
start:
mov ax, cs
mov ds, ax
mov si, offset num
mov di, offset data
mov cx, 6
s:
push cx
mov a...
阅读全文 |
评论次数(2) |
浏览次数(1009) |
所属类型(汇编作业)
[2009-05-04 17:33] 第14章
检测点 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
mov al, 0
out 71h, al
检测点 14.2
;编程, 用加法和移位指令计算 (ax) = (ax)*10
;提示, (ax)*10 = (ax)*2 + (ax)*8
;移位是对字节操作, 高位保存在CF
;为了让信息不丢失, 那么高位也相就相反位移(保存移出数据的信息), ...
(1) 编程, 读取 CMOS RAM 的 2 号单元的内容
mov al, 2
out 70h, al
in al, 71h
(2) 编程, 向 CMOS RAM 的 2 号单元写入 0
mov al, 2
out 70h, al
mov al, 0
out 71h, al
检测点 14.2
;编程, 用加法和移位指令计算 (ax) = (ax)*10
;提示, (ax)*10 = (ax)*2 + (ax)*8
;移位是对字节操作, 高位保存在CF
;为了让信息不丢失, 那么高位也相就相反位移(保存移出数据的信息), ...
阅读全文 |
评论次数(1) |
浏览次数(797) |
所属类型(汇编作业)
[2009-05-04 10:05] 实验13 编写应用中断例程
; 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
sta...
; 下面的程序, 分别在屏幕的第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
sta...
阅读全文 |
评论次数(1) |
浏览次数(655) |
所属类型(汇编作业)
[2009-05-02 20:49] 第13章
检测点 13.1
(1) 在上面的内容中, 我们用 7ch 中断例程实现 loop 的功能, 则上面的 7ch 中断例程所能进行的最大转移位移是多少?
分析: 根据 CX 的值, 能实现 2^16
(2) 用 7ch 中断例程完成的 jmp near ptr s 指令的功能, 用 bx 向中断全程传送转移位移,
应用举例: 在屏幕的第12行, 显示 data 段中以0 结尾的字符串
assume cs:code
data segment
db 'conversation',0
data ends
code segment
start:mov ax, data
...
(1) 在上面的内容中, 我们用 7ch 中断例程实现 loop 的功能, 则上面的 7ch 中断例程所能进行的最大转移位移是多少?
分析: 根据 CX 的值, 能实现 2^16
(2) 用 7ch 中断例程完成的 jmp near ptr s 指令的功能, 用 bx 向中断全程传送转移位移,
应用举例: 在屏幕的第12行, 显示 data 段中以0 结尾的字符串
assume cs:code
data segment
db 'conversation',0
data ends
code segment
start:mov ax, data
...
阅读全文 |
评论次数(2) |
浏览次数(915) |
所属类型(汇编作业)
[2009-05-01 23:54] 第12章
检测点 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 号中断源对应的中断处理程序入口的偏移的内存单元的地址为: [N*4 ]
存储 N 号中断源对应的中断处理程序入口的段地址的内存单元的地址为:[N*4 + 2]...
(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 号中断源对应的中断处理程序入口的偏移的内存单元的地址为: [N*4 ]
存储 N 号中断源对应的中断处理程序入口的段地址的内存单元的地址为:[N*4 + 2]...
阅读全文 |
评论次数(1) |
浏览次数(653) |
所属类型(汇编作业)
[2009-04-30 23:24] 实验11 编写子程序
; 实验11 编写子程序
; 名称: letterc
; 功能: 将以 0 结尾的字符串的小写字母转变成大写字母
; 参数: ds:si 指向字符串首地址
; 应用举例 :
assume cs:codesg
datasg segment
db "Beginner's All-purpopse Symbolic Instruction Code. ",0
datasg ends
codesg segment
begin:
mov ax, datasg
mov ds, ax
mov si, 0
call letterc
mov ax, 4c00h ...
; 名称: letterc
; 功能: 将以 0 结尾的字符串的小写字母转变成大写字母
; 参数: ds:si 指向字符串首地址
; 应用举例 :
assume cs:codesg
datasg segment
db "Beginner's All-purpopse Symbolic Instruction Code. ",0
datasg ends
codesg segment
begin:
mov ax, datasg
mov ds, ax
mov si, 0
call letterc
mov ax, 4c00h ...
阅读全文 |
评论次数(1) |
浏览次数(903) |
所属类型(汇编作业)
[2009-04-30 19:20] 第11章 标志寄存器 (答案更新过)
检测点11.1 写出下面每条指令执行后, ZF , PF , SF 等标志位的值
sub al, al ( ZF=1, PF=1, SF=0 )
mov al, 1 (ZF=1, PF=1, SF=0 )
push ax (ZF=1 , PF=1, SF=0 )
pop bx (ZF=0, PF=0 , SF=0)
add al, bl ( ZF=0, PF=1, SF=0 )
add al, 10 ( ZF=0, PF=1, SF=0 )
mul al ( ZF=0, PF=1, SF=0 )
检测11.2 写出下面每条指令执行后,ZF , PF , SF , CF...
sub al, al ( ZF=1, PF=1, SF=0 )
mov al, 1 (ZF=1, PF=1, SF=0 )
push ax (ZF=1 , PF=1, SF=0 )
pop bx (ZF=0, PF=0 , SF=0)
add al, bl ( ZF=0, PF=1, SF=0 )
add al, 10 ( ZF=0, PF=1, SF=0 )
mul al ( ZF=0, PF=1, SF=0 )
检测11.2 写出下面每条指令执行后,ZF , PF , SF , CF...
阅读全文 |
评论次数(1) |
浏览次数(875) |
所属类型(汇编作业)
『 查看更多文章 』