汇编网首页登录博客注册
zihaolee的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  

[2010-05-09 21:30] 17.3:字符串的输入

理解了很长的时间,终于调出来了。

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 
  ;===========================...
阅读全文 | 评论次数(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],...
阅读全文 | 评论次数(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 ...
阅读全文 | 评论次数(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 ;设置一栈段
 ;============...
阅读全文 | 评论次数(0) | 浏览次数(533) | 所属类型(各次练习)

[2010-05-06 10:43] 第十五章笔记

1、发现在新int9中断程序中,将调用原int9中断那两条指令写到“F1”后面,则实现不了F1改变颜色的功能,暂时不知道为什么?
  回答:因为正常情况下汇编是顺序执行的,所以得先执行原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 ;设栈段
 ;-------------------...
阅读全文 | 评论次数(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
  这两条指令实现“设置中断向量表”,为防止设置过程中...
阅读全文 | 评论次数(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个字节,正确返回。...
阅读全文 | 评论次数(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 ...
阅读全文 | 评论次数(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...
阅读全文 | 评论次数(0) | 浏览次数(550) | 所属类型(各次练习)
『 查看更多文章 』