1366627538 发表于 2016-7-29 17:02:08

利用中断16实现在屏幕上显示输入的字符

assume cs:code,ds:data

data segment

   yan db 4,2,1
       
data ends

code segment

      start:
       

       
        mov ax,0b800h
       
        mov ds,ax
       
        mov bx,160*12+110*2
       
       
       
        mov cx,3

kai:

    sti
    int 16h             ;中断16h 放在循环中不能被执行,而是跳过去了,在循坏外可以正常执行
       
        mov ds:,al
       
        mov si,0
       
        mov dl,yan      ;   定的值不对 我的值储存在 1ca4:0010中 并没有占用1ca4:0的位置 ,可能是yan标志造成的,定的值 所有的段寄存器加 偏移0
                                          都没有这个值
       
       
       
        mov byte ptr ds:,0
       
       
        add bx,4
        inc si
       

loop kai       

    mov ax,4c00h
        int 21h

code ends
   
        end start



                   问题一:   为什么int16中断在循环中就不能用了

                   问题二:   储存资料的区域是不是在前面加标号,它的前16个字节就会被空出来

                   问题三:   直接定址表这个方法我用的是不是有问题,定的值在debug中显示 是从[ si+0000 ] 中得出的,但是我把所有的寄存起放在这个取值框的前面当段地址都没有这个值,它是从哪里来的

                   问题四: 我该怎么改才正确尼!!!!!

                                                                                                                                                                                 跪求    大神       给解释

1366627538 发表于 2016-7-30 08:21:28

   自问自答啦!!!!

    第一个问题 :因为我在int16号中断前没有将 ah 功能号 设置为 0

    第二个问题:标号不会影响data的排位,代码区跟资料区一般都会 间隔 100,100是十六进制数

    第三个问题:现在还不清楚,不知道编译器是从哪里抠出来的值

    第四个问题: 我现在已经正常实现我要的功能了 附上代码

assume cs:code,ds:data

data segment

   yan db 4,2,1
      
data ends

code segment

      start:
      

      
      mov ax,0b800h
      
      mov ds,ax
      
      mov bx,160*12+110*2
      
      mov ax,data
          mov es,ax
                mov si,0
      
      mov cx,3

kai:
   
        mov ah,0
    sti
    int 16h             ;中断16h 放在循环中不能被执行,而是跳过去了,在循坏外可以正常执行
      
      mov ds:,al

                mov dl,es:    ;   定的值不对 我的值储存在 1ca4:0010中 并没有占用1ca4:0的位置 ,可能是yan标志造成的,定的值 所有的段寄存器加 偏移0

      mov byte ptr ds:,dl
      
      mov byte ptr ds:,0
      
      
      add bx,4
      inc si
      

loop kai      

    mov ax,4c00h
      int 21h

code ends
   
      end start
页: [1]
查看完整版本: 利用中断16实现在屏幕上显示输入的字符