鱼C论坛

 找回密码
 立即注册
查看: 3227|回复: 1

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

[复制链接]
发表于 2016-7-29 17:02:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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:[bx],al
       
        mov si,0
       
        mov dl,yan[si]      ;   定的值不对 我的值储存在 1ca4:0010中 并没有占用1ca4:0的位置 ,可能是yan标志造成的,定的值 所有的段寄存器加 偏移0
                                          都没有这个值
       
       
       
        mov byte ptr ds:[bx+2],0
       
       
        add bx,4
        inc si
       

  loop kai       
  
    mov ax,4c00h
        int 21h
  
code ends
   
        end start



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

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

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

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

                                                                                                                                                                                   跪求    大神       给解释
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-7-30 08:21:28 | 显示全部楼层
   自问自答啦!!!!

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

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

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

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

  1. assume cs:code,ds:data

  2. data segment

  3.    yan db 4,2,1
  4.         
  5. data ends

  6. code segment

  7.       start:
  8.         

  9.         
  10.         mov ax,0b800h
  11.         
  12.         mov ds,ax
  13.         
  14.         mov bx,160*12+110*2
  15.         
  16.         mov ax,data
  17.             mov es,ax
  18.                 mov si,0
  19.         
  20.         mov cx,3

  21.   kai:
  22.      
  23.         mov ah,0
  24.     sti
  25.     int 16h             ;中断16h 放在循环中不能被执行,而是跳过去了,在循坏外可以正常执行
  26.         
  27.         mov ds:[bx],al

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

  29.         mov byte ptr ds:[bx+1],dl
  30.         
  31.         mov byte ptr ds:[bx+2],0
  32.         
  33.         
  34.         add bx,4
  35.         inc si
  36.         

  37.   loop kai        
  38.   
  39.     mov ax,4c00h
  40.         int 21h
  41.   
  42. code ends
  43.    
  44.         end start
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-6 09:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表