理解了很长的时间,终于调出来了。
assume cs:code,ds:data
data segment
db 65535 dup(0)
data ends
code segment
start:
mov ax,data
mov ds,ax ;字符串存放段
call getstr ;调用接受字符串输入子程序
mov ax,4c00h
int 21h
;===========================...
- [zihaolee] 哦 我记得就是debug里,用g直接把程序运完,发现寄存器不改变;用t或p单步运行,就能看到寄存器 04/28 15:52
- [mywiil] 今天做rep movsb(P232)页时,发现用G直接执行完程序,寄存器不会改变,用T单步执行就能改 04/25 20:10
[2010-05-09 21:30] 17.3:字符串的输入
阅读全文 |
评论次数(0) |
浏览次数(512) |
所属类型(各次练习)
[2010-05-08 15:08] 实验16:直接地址表的理解
终于修改完了,总结有两个要注意的因素。
标号table里sub1是当下程序的偏移地址,并不随安装到0:200后而改变;但我们的目的是令其偏移地址指向0:200段里面,因此要做两个工作:
1、将中断程序放到start的前面,这样就可以顺利计算出相对于0的偏移地址了;
另外一个办法就是中断程序放后面,但是改成sub1-int7算出偏移地址;
再另外一个办法就是用org来定位偏移地址。
2、设置正确的段地址给sub1。可以将其改成sub1+200h;
另外一个办法就是改 mov word ptr es:[4*7ch],...
标号table里sub1是当下程序的偏移地址,并不随安装到0:200后而改变;但我们的目的是令其偏移地址指向0:200段里面,因此要做两个工作:
1、将中断程序放到start的前面,这样就可以顺利计算出相对于0的偏移地址了;
另外一个办法就是中断程序放后面,但是改成sub1-int7算出偏移地址;
再另外一个办法就是用org来定位偏移地址。
2、设置正确的段地址给sub1。可以将其改成sub1+200h;
另外一个办法就是改 mov word ptr es:[4*7ch],...
阅读全文 |
评论次数(0) |
浏览次数(530) |
所属类型(各次练习)
[2010-05-08 09:47] 实验14:端口(CMOS RAM)
终于调出来了,原来问题在于输出显存的位置重叠了。
assume cs:cod
cod segment
db 9,8,7,4,2,0,'/','/',' ',':',':',' '
start:
mov ax,cs
mov ds,ax
mov di,160*12+2*40
mov si,0
mov cx,6
s:
push cx
mov al,ds:[si] ;定位访问的位置
out 70h,al
in al,71h ;读出CMOS RAM中al号单元的数据
mov ah,al
mov cl,4 ...
assume cs:cod
cod segment
db 9,8,7,4,2,0,'/','/',' ',':',':',' '
start:
mov ax,cs
mov ds,ax
mov di,160*12+2*40
mov si,0
mov cx,6
s:
push cx
mov al,ds:[si] ;定位访问的位置
out 70h,al
in al,71h ;读出CMOS RAM中al号单元的数据
mov ah,al
mov cl,4 ...
阅读全文 |
评论次数(0) |
浏览次数(555) |
所属类型(各次练习)
[2010-05-06 16:26] 实验15:安装int9外中断(键盘输入)
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;安装新int9中断程序:按A显示满屏A
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
assume cs:cod
sta segment
db 128 dup(0)
sta ends
cod segment
start:
mov ax,sta
mov ss,ax
mov sp,128 ;设置一栈段
;============...
;安装新int9中断程序:按A显示满屏A
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
assume cs:cod
sta segment
db 128 dup(0)
sta ends
cod segment
start:
mov ax,sta
mov ss,ax
mov sp,128 ;设置一栈段
;============...
阅读全文 |
评论次数(0) |
浏览次数(533) |
所属类型(各次练习)
[2010-05-06 10:43] 第十五章笔记
1、发现在新int9中断程序中,将调用原int9中断那两条指令写到“F1”后面,则实现不了F1改变颜色的功能,暂时不知道为什么?
回答:因为正常情况下汇编是顺序执行的,所以得先执行原int9的功能来处理键盘输入细节,后再执行新功能。
2、在实现“在屏幕上显示‘a’到‘z’的例子”中,主程序后有段“将int9恢复为原来的地址”的指令,删去后程序仍能正常运行功能,不知道作用在什么?
回答:为保证程序的完整性。因为实现该程序后,将原int9的地址移走了,以后的程序使用int9中断就不行了,所以得把原int9恢复。...
回答:因为正常情况下汇编是顺序执行的,所以得先执行原int9的功能来处理键盘输入细节,后再执行新功能。
2、在实现“在屏幕上显示‘a’到‘z’的例子”中,主程序后有段“将int9恢复为原来的地址”的指令,删去后程序仍能正常运行功能,不知道作用在什么?
回答:为保证程序的完整性。因为实现该程序后,将原int9的地址移走了,以后的程序使用int9中断就不行了,所以得把原int9恢复。...
阅读全文 |
评论次数(0) |
浏览次数(545) |
所属类型(阶段心得)
[2010-05-06 10:26] 第十五章:安装外中断int9的例子
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;屏幕中间依次显示'a'到'z',应用键盘
;外中断F1改变屏幕颜色设置
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
assume cs:cod
sta segment
db 128 dup(0)
sta ends
cod segment
start:
mov ax,sta
mov ss,ax
mov sp,128 ;设栈段
;-------------------...
;屏幕中间依次显示'a'到'z',应用键盘
;外中断F1改变屏幕颜色设置
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
assume cs:cod
sta segment
db 128 dup(0)
sta ends
cod segment
start:
mov ax,sta
mov ss,ax
mov sp,128 ;设栈段
;-------------------...
阅读全文 |
评论次数(0) |
浏览次数(534) |
所属类型(各次练习)
[2010-05-05 10:42] #检测点15.1
(1)pushf
pushf
pop ax
and ah,11111100b
push ax
popf
这几条指令其实是模拟了进入原int9子程序前,a.标志寄存器入栈 b.IT/IF设0 c.CS/IP入栈的功能。对应的就是int9。
call dword ptr ds:[0]
而在进入新中断后,IF/IT都设0了,所以可以省去中间几步。
(2)mov word ptr es:[9*4],offset int9
mov es:[9*4+2],cs
这两条指令实现“设置中断向量表”,为防止设置过程中...
pushf
pop ax
and ah,11111100b
push ax
popf
这几条指令其实是模拟了进入原int9子程序前,a.标志寄存器入栈 b.IT/IF设0 c.CS/IP入栈的功能。对应的就是int9。
call dword ptr ds:[0]
而在进入新中断后,IF/IT都设0了,所以可以省去中间几步。
(2)mov word ptr es:[9*4],offset int9
mov es:[9*4+2],cs
这两条指令实现“设置中断向量表”,为防止设置过程中...
阅读全文 |
评论次数(0) |
浏览次数(522) |
所属类型(各次练习)
[2010-05-04 16:24] 实验8:转移指令(位移)
答:注意,此程序不会执行S1后的指令。分析如下:
首先mov di,offset s/mov si,offset s2/mov ax,cs:[si]/mov cs:[di],ax几条指令,实现了将s2的内容放到s中;
然后jmp short s1是根据位移来做转移的,即s2的地址-s1的地址,即为F6(原码为-10);
所以我们看到,s的内容为将当前IP向前移动10个字节,正确返回。...
首先mov di,offset s/mov si,offset s2/mov ax,cs:[si]/mov cs:[di],ax几条指令,实现了将s2的内容放到s中;
然后jmp short s1是根据位移来做转移的,即s2的地址-s1的地址,即为F6(原码为-10);
所以我们看到,s的内容为将当前IP向前移动10个字节,正确返回。...
阅读全文 |
评论次数(0) |
浏览次数(511) |
所属类型(各次练习)
[2010-05-03 11:27] “在屏幕中间显示当前月份”的问题
看到这条程序,分开个位十位,我就想到div,调试成功,大家学习指教~
原程序:
mov ah,al
mov cl,4
shr ah,cl ;除以16得到十位数
and al,00001111b ;得到个位的数
add ah,30h
add al,30h
结果:al放个位,ah放十位
改写的程序:
mov ah,0
mov bl,16
div bl ;al存放商(十位),ah存放余数(个位)
add ah,30h
add al,30h ...
原程序:
mov ah,al
mov cl,4
shr ah,cl ;除以16得到十位数
and al,00001111b ;得到个位的数
add ah,30h
add al,30h
结果:al放个位,ah放十位
改写的程序:
mov ah,0
mov bl,16
div bl ;al存放商(十位),ah存放余数(个位)
add ah,30h
add al,30h ...
阅读全文 |
评论次数(0) |
浏览次数(577) |
所属类型(阶段心得)
[2010-05-03 10:01] 检测点14.2
shl实现X=X*2
程序:
mov ax,2323h
mov bx,ax
mov cl,3
shl bx,cl
shl ax,1
add ax,bx
mov ax,4c00h
int 21h...
程序:
mov ax,2323h
mov bx,ax
mov cl,3
shl bx,cl
shl ax,1
add ax,bx
mov ax,4c00h
int 21h...
阅读全文 |
评论次数(0) |
浏览次数(550) |
所属类型(各次练习)
『 查看更多文章 』