理解了很长的时间,终于调出来了。
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) |
浏览次数(551) |
所属类型(各次练习)
[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) |
浏览次数(582) |
所属类型(各次练习)
[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) |
浏览次数(602) |
所属类型(各次练习)
[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) |
浏览次数(582) |
所属类型(各次练习)
[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) |
浏览次数(585) |
所属类型(各次练习)
[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) |
浏览次数(572) |
所属类型(各次练习)
[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) |
浏览次数(560) |
所属类型(各次练习)
[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) |
浏览次数(594) |
所属类型(各次练习)
[2010-05-03 09:47] 检测点14.1
例子:读2号单元
a,定位2号单元位置
b,读出2号单元的数据
(1)mov al,2
out 70h,al ;往70H端口写入al
in al,71h ;读出71H端口中的数据
(2)mov al,2
out 70h,al
mov al,0
out 71h,al...
a,定位2号单元位置
b,读出2号单元的数据
(1)mov al,2
out 70h,al ;往70H端口写入al
in al,71h ;读出71H端口中的数据
(2)mov al,2
out 70h,al
mov al,0
out 71h,al...
阅读全文 |
评论次数(0) |
浏览次数(279) |
所属类型(各次练习)
[2010-05-03 08:44] 实验13(3)作业:int 21h的运用
运用int 10h和int 21h 来实现字符串显示。偏移地址的存放和运用:
assume cs:cod
cod segment
s1: db 'good, better, best,','$'
s2: db 'never let 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
mov...
assume cs:cod
cod segment
s1: db 'good, better, best,','$'
s2: db 'never let 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
mov...
阅读全文 |
评论次数(0) |
浏览次数(282) |
所属类型(各次练习)