- [游客] 本人刚学汇编,到这里被卡了!楼主分析的好,我也终于知道怎么回事了。王爽老师的书真是不错呀,就是某些检 09/11 01:12
- [mywiil] 不错,不过要是能够再实现光标的跟随移动应该更好了。 09/07 08:58
- [lyheqs] "多写"因该写成"多谢",不好意思!我打ABC输入法! 06/17 17:51
- [lyheqs] 引用上面文章中的文字 "那H=1173, L=0383。 11730383/10 太难算了。分两步算 06/17 17:49
- [sinawear] 那个安装程序中保存的有原来的int 9的地址,执行后程序返回,可能丢失. 所以,会有错误了. 是 06/12 14:56
- [378499835] 回答楼上的,此公式是为了防止除法溢出时写的,便于操作,你有什么不同的见解可以说出来,大家一起分析下 06/10 17:36
- [游客] 请问楼主,X/N=int(H/N)*65536+[rem(H/N)*65536+L]/N这个公式是否 06/10 16:34
- [378499835] 谢谢楼上的回答,一起努力吧 06/08 13:55
- [游客] 好!! 博主很厉害。 学习了! 06/08 11:22
- [游客] 只要T单步,肯定能进入到int 16h的程序中的。你可以在int 16h这条指令的时候,T一下,然后 06/08 10:46
- [godlike] 谢谢你对我的留言,你的提醒对我有很大的帮助,再次谢谢了 05/29 19:07
- [whos] 继续努力!! 05/16 17:59
- [miaozaoyang] 加油啊! 呵呵 03/17 22:46
[2009-09-06 10:37] 17.3
;子程序:字符串的入栈,出栈和显示
;参数说明:(ah)=功能号,0表示入栈,1表示出栈,2表示显示
;ds:si指向字符栈空间
;对于0号功能,(al)=入栈字符
;对于1号功能,(al)=返回的字符
;对于2号功能,(dh),(dl)=字符串在屏幕上显示的行列位置
assume cs:code,ds:data
data segment
db 1024 dup(0)
data ends
code segment
start:
mov ax,data
mov ds,ax
mov dl,0
...
;参数说明:(ah)=功能号,0表示入栈,1表示出栈,2表示显示
;ds:si指向字符栈空间
;对于0号功能,(al)=入栈字符
;对于1号功能,(al)=返回的字符
;对于2号功能,(dh),(dl)=字符串在屏幕上显示的行列位置
assume cs:code,ds:data
data segment
db 1024 dup(0)
data ends
code segment
start:
mov ax,data
mov ds,ax
mov dl,0
...
阅读全文 |
评论次数(1) |
浏览次数(1077) |
所属类型(汇编作业)
[2009-06-07 11:15] 检测点17.1
“在int 16h中断例程中,一定有设置if=1的指令”这句话的是对的,因为只有if=1了,才能引发int 9中断,进而才能引发int 16h,如果if不等于1,那键盘缓冲区里的数据就一直为空了,16号中断一直循环等待,可我看有人说“跟踪int16h内部,第一条语句就是sti ”我该怎么样理解int 16h的内部呢,我用debug跟踪后发现执行完int 16h后直接到下一条语句了,是不是我错了,希望知道的帮个忙。...
阅读全文 |
评论次数(2) |
浏览次数(1121) |
所属类型(汇编作业)
[2009-06-06 10:37] 实验16
;功能:
;用ah寄存器传递功能号,0表示清屏,1表示设置前景色,2表示设置背景色,3表示向上滚一行
;对于2,3号功能,用al传递颜色值,(al)∈{1,2,3,4,5,6,7}
;(1)清屏:将显存中当前屏幕中的字符设为空格符
;(2)设置前景色:设置显存中当前屏幕处于奇地址的属性字节的第0,1,2位
;(3)设置背景色:设置显存中当前屏幕处于奇地址的属性字节的第4,5,6位
;(4)向上滚动一行:以此将第n+1的内容复制到第n行处,最后一行为空
assume cs:code,ss:stack
stack segment
db 128 dup (0)
stack ...
;用ah寄存器传递功能号,0表示清屏,1表示设置前景色,2表示设置背景色,3表示向上滚一行
;对于2,3号功能,用al传递颜色值,(al)∈{1,2,3,4,5,6,7}
;(1)清屏:将显存中当前屏幕中的字符设为空格符
;(2)设置前景色:设置显存中当前屏幕处于奇地址的属性字节的第0,1,2位
;(3)设置背景色:设置显存中当前屏幕处于奇地址的属性字节的第4,5,6位
;(4)向上滚动一行:以此将第n+1的内容复制到第n行处,最后一行为空
assume cs:code,ss:stack
stack segment
db 128 dup (0)
stack ...
阅读全文 |
评论次数(1) |
浏览次数(1150) |
所属类型(汇编作业)
[2009-05-30 10:24] 检测点16.2
assume cs:code,es:data
data segment
a db 1,2,3,4,5,6,7,8
b dw 0
data ends
code segment
start: mov ax,data
mov es,ax
mov si,0
mov cx,8
s: mov al,a[si]
mov ah,0
add b,ax
inc si
loop s
mov ax,4c00h
int 21h
code ends
end start...
data segment
a db 1,2,3,4,5,6,7,8
b dw 0
data ends
code segment
start: mov ax,data
mov es,ax
mov si,0
mov cx,8
s: mov al,a[si]
mov ah,0
add b,ax
inc si
loop s
mov ax,4c00h
int 21h
code ends
end start...
阅读全文 |
评论次数(1) |
浏览次数(736) |
所属类型(汇编作业)
[2009-05-30 09:33] 检测点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 cs:[16],ax;这里没必要加word ptr因为已经知道它是做字操作,
adc word ptr cs:[18],0
add si,2
loop s
mov ax,4c00h
int 21h
code ends
end start ...
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 cs:[16],ax;这里没必要加word ptr因为已经知道它是做字操作,
adc word ptr cs:[18],0
add si,2
loop s
mov ax,4c00h
int 21h
code ends
end start ...
阅读全文 |
评论次数(3) |
浏览次数(810) |
所属类型(汇编作业)
[2009-05-29 13:05] 实验15
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 di,204h
mov cx,offset int9end-offset int9
cld
rep movsb
push es:[9*4]
pop es:[200h]
push e...
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 di,204h
mov cx,offset int9end-offset int9
cld
rep movsb
push es:[9*4]
pop es:[200h]
push e...
阅读全文 |
评论次数(1) |
浏览次数(806) |
所属类型(汇编作业)
[2009-05-28 21:40] 检测点15.1
(1)pushf
call dword ptr ds:[0]
(2)按书的提示走,只要在 新的int 9中断例程的入口地址处加上cli和sti即
cli
mov word ptr es:[9*4],offset int9
mov es:[9*4+2],cs
sti
开始觉得完事了,可我又将CLI和STI颠倒了个位置,即
sti
mov word ptr es:[9*4],offset int9
mov es:[9*4+2],cs
cli
此时出现个好玩的上面的可以正常看到,而下面的必须DOS全屏才可以看到,不知道是为什么,希望会的帮帮我...
call dword ptr ds:[0]
(2)按书的提示走,只要在 新的int 9中断例程的入口地址处加上cli和sti即
cli
mov word ptr es:[9*4],offset int9
mov es:[9*4+2],cs
sti
开始觉得完事了,可我又将CLI和STI颠倒了个位置,即
sti
mov word ptr es:[9*4],offset int9
mov es:[9*4+2],cs
cli
此时出现个好玩的上面的可以正常看到,而下面的必须DOS全屏才可以看到,不知道是为什么,希望会的帮帮我...
阅读全文 |
评论次数(1) |
浏览次数(1101) |
所属类型(汇编作业)
[2009-05-24 17:11] 实验14
assume cs:code,ds:data
data segment
db 9,8,7,4,2,0
data ends
stack segment
db '/','/',' ',':',':'
stack ends
code segment
start: mov ax,data
mov ds,ax
mov si,0 ;指向字符串首地址
mov di,0
mov cx,6
s1: push cx
mov al,[si];读取CMOS RAM的相应单元内容
out 70h,al
in al,71h
mov...
data segment
db 9,8,7,4,2,0
data ends
stack segment
db '/','/',' ',':',':'
stack ends
code segment
start: mov ax,data
mov ds,ax
mov si,0 ;指向字符串首地址
mov di,0
mov cx,6
s1: push cx
mov al,[si];读取CMOS RAM的相应单元内容
out 70h,al
in al,71h
mov...
阅读全文 |
评论次数(1) |
浏览次数(827) |
所属类型(汇编作业)
[2009-05-23 14:58] 检测点14.2
编程,用加法和移位指令计算(ax)=(ax)*10假设(ax)=3,所以(ax)=30=1eH
assume cs:code
code segment
start: mov ax,3
mov bx,ax
shl bx,1
mov cl,3
shl ax,cl
add ax,bx
mov ax,4c00h
int 21h
code ends
end start...
assume cs:code
code segment
start: mov ax,3
mov bx,ax
shl bx,1
mov cl,3
shl ax,cl
add ax,bx
mov ax,4c00h
int 21h
code ends
end start...
阅读全文 |
评论次数(1) |
浏览次数(785) |
所属类型(汇编作业)
[2009-05-23 14:47] 检测点14.1
(1)编程,读取CMOS RAM的2号单元的内容:
assume cs:code
code segment
start: mov al,2
out 70h,al;将2送入端口70H
in al,71h;从端口读2号内容
mov ax,4c00h
int 21h
code ends
end start
这里如果你直接跟踪后发现它不会显示时间的分钟的,确切的说是显示时间被覆盖了,因为OUT时向下运行多运行一条,IN又多运行了一条,所以再后面加两条才能看到,即我加了NOP后,跟踪发现它就显示分钟了,哈哈
(2)编程,向CMOS RAM的2号单元写入0
ass...
assume cs:code
code segment
start: mov al,2
out 70h,al;将2送入端口70H
in al,71h;从端口读2号内容
mov ax,4c00h
int 21h
code ends
end start
这里如果你直接跟踪后发现它不会显示时间的分钟的,确切的说是显示时间被覆盖了,因为OUT时向下运行多运行一条,IN又多运行了一条,所以再后面加两条才能看到,即我加了NOP后,跟踪发现它就显示分钟了,哈哈
(2)编程,向CMOS RAM的2号单元写入0
ass...
阅读全文 |
评论次数(1) |
浏览次数(791) |
所属类型(汇编作业)
『 查看更多文章 』