鱼C论坛

 找回密码
 立即注册
查看: 2216|回复: 0

[汇编作业] 课程设计2

[复制链接]
发表于 2017-6-1 18:05:38 | 显示全部楼层 |阅读模式

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

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

x
很久以前完成的代码。
由于当时水平限制没办法弄成启动盘。所以代码还不完善,但是能在dos下运行,现在也懒得修改了。
写修改时间的代码很困难,windows妈妈不让直接写端口,只能变通处理,幸好能够修改成功。
发上来给后边学习的朋友有困难时看能不能参考一下

  1. assume cs:code


  2. code segment

  3. setup: mov ax,cs           ;将主程序写入磁盘2扇区
  4.        mov es,ax
  5.           
  6. calc:  mov ax,offset zhuc-offset n_in9ok
  7.        mov dx,0
  8.        mov bx,512
  9.        div bx
  10.        cmp dx,0
  11.        jne adal
  12.        jmp short set            
  13. adal:  inc al     ;计算出需要的扇区数
  14.           
  15. set:   mov bx,offset zhuc
  16.        mov ah,3   ;写入
  17.            mov ch,0   ;磁道号
  18.            mov cl,2   ;扇区号
  19.            mov dh,0   ;磁头号(面号)
  20.            mov dl,0   ;没有软盘,能否写到81h ;驱动器号(D盘)
  21.            int 13h
  22.           
  23.            mov bx,offset lead  ;将引导程序写入磁盘1扇区
  24.            mov al,1
  25.            mov ah,3   ;写入
  26.            mov ch,0   ;磁道号
  27.            mov cl,1   ;扇区号
  28.            mov dh,0   ;磁头号(面号)
  29.            mov dl,0   ;没有软盘,能否写到81h ;驱动器号(D盘)
  30.            int 13h
  31.           
  32. lead:  mov ax,0      ;程序引导部分 ,负责将主程序写入到引导程序之后的内存
  33.        mov es,ax
  34.        mov ax,offset zhuc-offset n_in9ok ;根据主程序长度计算al
  35.        mov dx,0
  36.        mov bx,512
  37.        div bx
  38.        cmp dx,0
  39.        jne ada2
  40.        jmp short set1          
  41. ada2:  inc al

  42. set1:  mov bx,offset zhuc-offset lead ;
  43.            add bx,7c00h
  44.        mov ah,2   ;读盘
  45.            mov ch,0   ;磁道号
  46.            mov cl,2   ;扇区号
  47.            mov dh,0   ;磁头号(面号)
  48.            mov dl,0   ;没有软盘,能否用D盘
  49.            int 13h

  50. zhuc:  jmp short start          
  51. stack segment
  52.     db 64 dup (0)
  53. stack ends
  54. start:   mov ax,stack
  55.          mov ss,ax
  56.                  mov sp,64
  57.                  jmp short s

  58. d1 db '1)reset pc',0
  59. d2 db '2)start system',0
  60. d3 db '3)clock',0
  61. d4 db '4)set clock',0
  62. d5 dw x1,x2,x3,x4
  63. d6 db 'Esc)return',0
  64. d7 db 'F1 )change colors',0
  65. d8 db 'time setting error',0
  66. s:       mov ax,cs      ;显示选项
  67.                  mov ds,ax
  68.                  mov ax,0b800h
  69.                  mov es,ax
  70.                  mov di,0
  71.                  mov cx,2000
  72. sq:                 mov byte ptr es:[di],' '   ;清屏
  73.                  inc di
  74.                  mov byte ptr es:[di],7
  75.                  inc di
  76.                  loop sq
  77.                  mov si,offset d1
  78.                  mov dh,10
  79.                  mov dl,33
  80.                  mov bl,7
  81.                  call show
  82.                  mov si,offset d2
  83.                  inc dh  
  84.                  call show
  85.                  mov si,offset d3
  86.                  inc dh
  87.                  call show
  88.                  mov si,offset d4
  89.                  inc dh
  90.                  call show
  91.                  
  92. s1:                 mov ah,0   ;等待输入
  93.                  int 16h
  94.                  cmp al,31h
  95.                  jb s1
  96.                  cmp al,34h
  97.                  ja s1
  98.          mov bl,al ;直接定址
  99.                  sub bl,31h
  100.                  mov bh,0
  101.                  add bx,bx
  102.                  jmp cs:d5[bx]
  103.                  
  104. x1:      mov ax,0ffffh
  105.          push ax
  106.          mov ax,0
  107.          push ax
  108.                  mov bp,sp
  109.                  jmp dword ptr ss:[bp]
  110.                  
  111.                  
  112. x2:                 mov ax,0
  113.          mov es,ax
  114.          mov bx,200h
  115.          mov al,1
  116.              mov ah,2   ;读盘
  117.              mov ch,0   ;磁道号
  118.              mov cl,1   ;扇区号
  119.              mov dh,0   ;磁头号(面号)
  120.              mov dl,80h ;c盘
  121.              int 13h
  122.          push bx
  123.          push es
  124.          mov bx,sp                  
  125.              jmp dword ptr ss:[bx]

  126. x3:                 mov si,offset d3
  127.                  mov dh,12
  128.                  mov dl,33
  129.                  mov bh,0
  130.                  mov bl,es:[1]
  131.                  or bl,00001000b
  132.                  call show  ; 使第三选项高亮
  133.                  mov si,offset d6
  134.                  mov dh,1
  135.                  mov dl,60
  136.                  mov bl,es:[1]
  137.                  call show  ;增加Esc提示
  138.                  mov si,offset d7
  139.                  inc dh
  140.                  call show  ;增加F1提示
  141.                  
  142. x3a:         in al,60h
  143.                  cmp al,81h
  144.                  je x3b    ;回到初始
  145.                  cmp al,3bh
  146.                  je x31  ;跳至变色
  147.                  call tm
  148.                  mov si,offset td2
  149.                  mov dh,24
  150.                  mov dl,60
  151.                  mov bh,1  ; bh不等于0时,不设置颜色属性
  152.                  call show
  153.                  jmp short x3
  154. x3b:     mov al,0
  155.          out 60h,al
  156.          jmp near ptr s

  157. x31:         mov ax,0b800h
  158.                  out 60h,al      ;很重要,调零60h端口的数值(这个设置到底有什么用还不太清楚,只知道不设置的话按F1就乱变色)
  159.                  mov es,ax
  160.                  mov di,1
  161.                  mov cx,2000
  162.          cmp byte ptr es:[di],1
  163.                  je x33
  164. x32:     dec byte ptr es:[di]
  165.                  add di,2
  166.                  loop x32
  167.                  jmp near ptr x3a
  168.              
  169. x33:     mov byte ptr es:[di],7
  170.                  add di,2
  171.                  loop x33
  172.                  jmp near ptr x3a

  173. x4:      mov ax,0
  174.                  mov es,ax
  175.                  mov di,208h
  176.                  push es:[9h*4+2]
  177.                  push es:[9h*4]
  178.                  pop es:[200h]
  179.                  pop es:[200h+2]
  180.                  mov word ptr es:[204h],0ffh
  181.                  mov word ptr es:[206h],0ffh
  182.                  
  183.                  mov ax,cs
  184.                  mov ds,ax
  185.                  mov si,offset n_in9
  186.                  mov cx,offset n_in9ok-offset n_in9
  187.          cld                  
  188.                  rep movsb
  189.                  
  190.                  cli
  191.                  mov word ptr es:[9h*4],208h
  192.                  mov word ptr es:[9h*4+2],0
  193.                  sti

  194.          mov si,offset d4 ; 修改时间主程序
  195.                  mov ax,0b800h
  196.                  mov es,ax
  197.                  mov dh,13
  198.                  mov dl,33
  199.                  mov bh,0
  200.                  mov bl,es:[1]
  201.                  or bl,00001000b
  202.                  call show  ; 使第四选项高亮
  203.                  mov byte ptr cs:td2[20],0
  204.                  jmp short x4s
  205.                  x4d3 dw tent,tz,ty,tesc,tz,ty
  206. x4s:         call tm  ;查询时间
  207. x4t:     call tbm ;比对时间,并保存到td3
  208.                  mov si,offset td3
  209.                  mov dh,24
  210.                  mov dl,60
  211.                  mov bh,1  ; bh不等于0时,不设置颜色属性
  212.                  call show
  213.                  mov di,0f77h;设置查询首地址
  214.                  call cw  ;查亮度所对应的字符串位置(假如没有高亮位设置bl=0),保存到bl(38)
  215.                  call zz  ;BL位时间高亮,自动往后跳过非数字位,保存bl(38)
  216.                   
  217.                  mov ax,0
  218.                  mov es,ax
  219.                  cmp byte ptr es:[204h],0ffh
  220.                  jne x4x  ;数字键程序
  221.                  cmp byte ptr es:[206h],0ffh
  222.                  jne x4g  ;功能键程序
  223.                  mov bh,1
  224.                  jmp short x4t
  225.                  
  226. x4x:         mov di,0f77h
  227.          call cw
  228.                  call tn
  229.                  call ty
  230.                  call zz
  231.                  mov bh,1
  232.                  jmp short x4t   
  233.                  
  234. x4g:         mov bl,es:[206h]
  235.          add bl,bl
  236.                  mov bh,0
  237.                  mov byte ptr es:[206h],0ffh
  238.                  call x4d3[bx]
  239.                  mov bh,1
  240.                  jmp short x4t

  241.                  
  242. tent:         mov ax,0
  243.                  mov es,ax
  244.                  mov byte ptr es:[206h],0ffh
  245.                  push es:[200h+2]
  246.                  push es:[200h]
  247.                  pop es:[9h*4]
  248.                  pop es:[9h*4+2]
  249.                  mov al,0
  250.                  out 60h,al
  251.                  mov ax,0b800h
  252.                  mov es,ax
  253.                  mov di,1
  254.                  mov cx,2000
  255. tenq:         mov byte ptr es:[di],7
  256.                  add di,2
  257.                  loop tenq
  258.                  jmp near ptr x3
  259.                  
  260. tz:                 mov di,0f77h
  261.          mov ax,0b800h
  262.                  mov es,ax
  263.                  call cw
  264.          cmp bx,0
  265.                  je tz1
  266. tz2:         sub bx,2
  267.                  cmp byte ptr es:[di+bx-1],30h
  268.                  jb tz2
  269.                  cmp byte ptr es:[di+bx-1],39h
  270.                  ja  tz2
  271.                  call zz
  272.                  ret
  273. tz1:         mov bx,36
  274.                  call zz
  275.                  ret
  276. ty:                 mov di,0f77h
  277.          call cw
  278.          cmp bx,36
  279.                  je ty1
  280.                  add bx,2
  281.                  call zz
  282.                  ret
  283. ty1:         mov bx,0
  284.                  call zz
  285.                  ret
  286.                  
  287. tesc:         mov ax,0
  288.                  mov es,ax
  289.                  mov byte ptr es:[206h],0ffh
  290.                  push es:[200h+2]
  291.                  push es:[200h]
  292.                  pop es:[9h*4]
  293.                  pop es:[9h*4+2]
  294.                  mov al,0
  295.                  out 60h,al
  296.                  jmp near ptr s

  297.                  
  298. tm:             push bx ;  查询并保存时间子程序 (直接循环显示时间没法应用中断,应在主程序设置条件循环)
  299.          push si
  300.                  push cx
  301.                  push ax
  302.              push di
  303.                  
  304.                  jmp short ti
  305.      td1 db 9,8,7,4,2,0
  306.      td2 db '20yy/mm/dd hh:mm:ss',0,0
  307.          td3 db '20yy/mm/dd hh:mm:ss',0,0
  308. ti:      mov di,0
  309.                  mov si,2
  310.                  mov cx,6
  311. tii:         push cx
  312.              mov al,cs:td1[di]
  313.                  out 70h,al
  314.                  in al,71h
  315.                  mov ah,al
  316.                  mov cl,4
  317.                  shr al,cl
  318.                  and ah,00001111b
  319.                  add ax,3030h
  320.                  mov word ptr cs:td2[si],ax
  321.                  cmp byte ptr cs:td2[20],0
  322.                  jne tiii
  323.                  mov word ptr cs:td3[si],ax
  324. tiii:         inc di
  325.                  add si,3
  326.                  pop cx
  327.                  loop tii
  328.                  
  329.                  pop di
  330.                  pop ax
  331.                  pop cx
  332.                  pop si
  333.                  pop bx
  334.              ret
  335.         
  336. tbm:         push bx ;  
  337.          push si
  338.                  push cx
  339.                  push ax
  340.                  push di
  341.                  
  342.          mov si,18
  343.                  
  344. tbii:         mov al,0
  345.                  out 70h,al
  346.                  in al,71h
  347.                  mov ah,al
  348.                  mov cl,4
  349.                  shr al,cl
  350.                  and ah,00001111b
  351.                  add ax,3030h
  352.                  cmp byte ptr cs:td2[si],ah
  353.                  jne tbiii
  354.                  jmp short tbme
  355.                  
  356. tbiii:                mov byte ptr cs:td2[20],1
  357.                     call tm
  358.             cmp td3[si],39h
  359.                     jne jia
  360.                         mov td3[si],30h
  361.             dec si
  362.                     cmp td3[si],35h
  363.                         jne jia
  364.                         mov td3[si],30h
  365.                         dec si
  366.                         dec si
  367.                         cmp td3[si],39h
  368.                         jne jia
  369.                         mov td3[si],30h
  370.                         dec si
  371.                         cmp td3[si],35h
  372.                         jne jia
  373.                         mov td3[si],30h
  374.                         dec si
  375.                         dec si
  376.                         cmp word ptr td3[si-1],3332h
  377.                         je jia0
  378.                         cmp byte ptr td3[si],39h
  379.                         jne jia
  380.                         mov td3[si],30h
  381.                         dec si
  382.                         inc td3[si]
  383.                         jmp short tbme
  384.                        
  385. jia0:       mov word ptr td3[si-1],3030h
  386.             call luna
  387.                         jmp short tbme
  388. jia:                inc td3[si]                  
  389.                  
  390. tbme:         pop di
  391.                  pop ax
  392.                  pop cx
  393.                  pop si
  394.                  pop bx
  395.              ret                 
  396.                  
  397. show:    push ax ; 显示以0结尾的字符串程序 dx=行列 cs:[si]=字符串起点 bl=颜色 bh不等于0时 不设置颜色
  398.                  push di
  399.                  push cx
  400.                  push si
  401.                  push dx
  402.                  
  403.                  mov ax,0b800h
  404.                  mov es,ax
  405.                  mov ax,160
  406.                  mul dh
  407.                  add dl,dl
  408.                  sub dl,2
  409.                  mov dh,0
  410.                  add ax,dx
  411.                  mov di,ax
  412. sh1:         mov cl,cs:[si]
  413.                  jcxz sh2
  414.                  mov es:[di],cl
  415.                  inc di
  416.                  cmp bh,0
  417.                  jne sh_nc
  418.                  mov es:[di],bl
  419. sh_nc:         inc si
  420.                  inc di
  421.                  jmp short sh1
  422.                  
  423. sh2:         pop dx
  424.          pop si
  425.          pop cx
  426.                  pop di
  427.                  pop ax
  428.          ret

  429. cw:                push ax ; 查亮度子程序(cw),保存至bl?,  参数:es:[di] 为查询字符串的首地址
  430.                 push es
  431.                 push cx
  432.                 mov bx,0b800h
  433.                 mov es,bx
  434.                 mov bx,0
  435.                 mov cx,19
  436.                
  437. c1:                mov al,es:[di+bx]
  438.         and al,00001000b
  439.                 cmp al,00001000b
  440.                 je c2
  441.                 add bx,2
  442.                 loop c1
  443.                 mov bx,0
  444. c2:                pop cx
  445.         pop es
  446.         pop ax
  447.         ret

  448. zz:                push bp     ;高亮时间子程序,bl为高亮位,能自动跳过非数字位。参数:di为时间首地址
  449.         push ax
  450.                 push cx
  451.                 mov ax,0b800h  
  452.                 mov es,ax
  453.                 mov bp,0
  454.         mov cx,19
  455. z1:     and byte ptr es:[di][bp],11110111b
  456.                 add bp,2
  457.                 loop z1               
  458.                 cmp byte ptr es:[di+bx-1],30h
  459.                 jb z3
  460.                 cmp byte ptr es:[di+bx-1],39h
  461.                 ja z3
  462. z2:     or byte ptr es:[di][bx],00001000b
  463.                 pop cx
  464.                 pop ax
  465.                 pop bp
  466.                 ret
  467. z3:                add bx,2
  468.                 jmp z2

  469. tn:      push ax ; 时间修改程序
  470.                  push bx
  471.                  mov bp,sp  ;保存栈位置
  472.                  push word ptr cs:td3[5]
  473.                  push word ptr cs:td3[8]
  474.                  push word ptr cs:td3[11]
  475.                  push word ptr cs:td3[14]
  476.                  push word ptr cs:td3[17]
  477.                  
  478.                  mov ax,bx
  479.          mov bl,2
  480.                  div bl
  481.                  mov bh,0
  482.                  mov bl,al
  483.                  mov al,es:[204h]
  484. tng:         mov cs:td3[bx],al
  485.               push ax
  486.                  push bx
  487.                  
  488.                  mov bl,10
  489.                  mov di,5
  490.                  mov cx,5
  491. tngs:         sub word ptr cs:td3[di],3030h
  492.                  add di,3
  493.                  loop tngs
  494.                  
  495.                  mov cx,5
  496.                  mov di,5
  497. tngs1:         mov al,td3[di]
  498.                  mul bl
  499.                  add al,cs:td3[di+1]
  500.                  mov td3[di],al
  501.                  add di,3
  502.                  loop tngs1
  503.                                   
  504.                  mov ax,0b800h
  505.                  mov es,ax
  506.                  mov di,0e36h
  507.                  mov cx,20
  508. tngx:         mov byte ptr es:[di],' '
  509.                  add di,2
  510.                  loop tngx
  511.                  
  512.                  call ttest
  513.                  pop bx
  514.          pop ax
  515.                  pop word ptr cs:td3[17]
  516.                  pop word ptr cs:td3[14]
  517.                  pop word ptr cs:td3[11]
  518.                  pop word ptr cs:td3[8]
  519.                  pop word ptr cs:td3[5]
  520.                  mov cs:td3[bx],al
  521.                  
  522. tne:         mov ax,0
  523.          mov es,ax
  524.          mov word ptr es:[204h],0ffh
  525.          mov sp,bp
  526.                  pop bx
  527.                  pop ax
  528.                  ret
  529.                                   
  530. ttest:         cmp byte ptr cs:td3[5],12 ;看月份是否大于12
  531.                  ja tns
  532.                  cmp byte ptr cs:td3[8],31 ;看日期是否大于31
  533.                  ja tns
  534.                  cmp byte ptr cs:td3[5],2 ;看月份是否2月
  535.                  je ttest1
  536.                  
  537.                  mov si,0
  538.                  mov cx,4
  539.                  jmp short ttxiao
  540. monn db 4,6,9,11
  541. ttxiao:         mov al,cs:monn[si]  ;看月份是否小月
  542.          cmp byte ptr cs:td3[5],al
  543.                  je ttest2
  544.                  add si,2
  545.                  loop ttxiao
  546.                  
  547.                  cmp byte ptr cs:td3[11],23
  548.                  ja tns
  549.                  cmp byte ptr cs:td3[14],59
  550.                  ja tns
  551.                  cmp byte ptr cs:td3[17],59
  552.                  ja tns
  553.                  ret
  554. ttest1:         call runnian
  555.          cmp cs:td3[20],0    ;看是否闰年
  556.                  je ttest1_1
  557.                  cmp byte ptr cs:td3[8],28 ;看日期是否大于28
  558.                  ja tns
  559.                  ret
  560. ttest1_1: cmp byte ptr cs:td3[8],29;看日期是否大于29
  561.                  ja tns
  562.                  ret
  563. ttest2:         cmp byte ptr cs:td3[8],30 ;看日期是否大于30
  564.                  ja tns
  565.                  ret
  566. tns:         mov si,offset d8
  567.                  mov dh,22
  568.                  mov dl,60
  569.                  mov bh,1
  570.                  call show
  571.          pop ax         ; 多一个Pop 因为是跳到这里来的 栈里存了原ip         
  572.                  pop bx
  573.                  pop ax
  574.                  pop word ptr cs:td3[17]
  575.                  pop word ptr cs:td3[14]
  576.                  pop word ptr cs:td3[11]
  577.                  pop word ptr cs:td3[8]
  578.                  pop word ptr cs:td3[5]
  579.                  jmp near ptr tne
  580.                  
  581. tn1:     push ax ; 时间修改程序
  582.                  push bx
  583.                  mov ax,bx
  584.          mov bl,2
  585.                  div bl
  586.                  mov bh,0
  587.                  mov bl,al
  588.                  mov al,es:[204h]
  589.                  mov word ptr es:[204h],0ffh
  590.                  mov cs:td3[bx],al
  591.                  pop bx
  592.                  pop ax
  593.                  ret
  594.                  
  595. luna:    jmp short lunas
  596. mon  dw 3430h,3630h,3930h,3131h
  597. lunas:         mov cx,4
  598.                  mov bp,3133h  ;设置成31号
  599.                  mov si,0
  600. cmp_m:         mov ax,cs:mon[si]
  601.          cmp word ptr cs:td3[5],ax   ; 看是不是小月
  602.                  je xiaoyue
  603.                  add si,2
  604.                  loop cmp_m
  605.                  cmp word ptr cs:td3[5],3230h  ; 看是不是2月
  606.                  je eryue
  607.          jmp short dayue

  608. xiaoyue: mov bp,3033h         ;设置成30号
  609.          jmp short dayue
  610.                  
  611. eryue:   call runnian     ;查是不是闰年,闰年余数保存在cs:td3[20]
  612.          cmp cs:td3[20],0
  613.                  je eryue1
  614.                  mov bp,3832h
  615.                  jmp short dayue
  616. eryue1:         mov bp,3932h
  617.                
  618.                  
  619. dayue:   cmp word ptr cs:td3[8],bp  ;看是多少号
  620.          je dayue_1
  621.          cmp byte ptr cs:td3[9],39h    ;看是不是9号
  622.          je dayue_2
  623.                  inc byte ptr cs:td3[9]
  624.                  ret
  625.                  
  626. dayue_1: mov word ptr cs:td3[8],3130h  ;是月底号就改成1号
  627.                  cmp word ptr cs:td3[5],3231h  ; 看是不是12月
  628.                  je dayue12
  629.                  cmp byte ptr cs:td3[6],39h    ; 看是不是9月
  630.                  je dayue11
  631.                  inc byte ptr cs:td3[6]
  632.                  ret
  633.                  
  634. dayue_2: inc byte ptr cs:td3[8]       ; 因为前一位不是3,所以是9让前一位加1
  635.                  mov byte ptr cs:td3[9],30h   ; 然后自己变成0
  636.                  ret
  637.                  
  638. dayue11: mov word ptr cs:td3[5],3031h  ;是9月就改成10月
  639.                  ret
  640.                  
  641. dayue12: mov word ptr cs:td3[5],3130h ; 是12月就改成1月
  642.                  cmp byte ptr cs:td3[3],39h  ; 看是不是第9年
  643.                  je dayue13
  644.                  inc byte ptr cs:td3[3]
  645.                  ret
  646.                  
  647. dayue13: mov byte ptr cs:td3[3],30h   ; 是第9年就改成0年
  648.                  cmp byte ptr cs:td3[2],39h   ; 看是不是第9年
  649.                  je dayue14
  650.                  inc byte ptr cs:td3[2]
  651.                  ret
  652.                  
  653. dayue14: mov byte ptr cs:td3[2],30h  ; 是第9年就改成0年
  654.                  cmp byte ptr cs:td3[1],39h  ; 看是不是第9年
  655.          je dayue15
  656.                  inc byte ptr cs:td3[1]
  657.                  ret
  658.                  
  659. dayue15: mov byte ptr cs:td3[1],30h  ; 是第9年就改成0年
  660.                  cmp byte ptr cs:td3[0],39h  ; 看是不是第9年
  661.                  je dayue16
  662.                  inc byte ptr cs:td3[0]
  663.                  ret
  664. dayue16: mov byte ptr cs:td3[0],30h   ; 是第9年就改成0年
  665.                  ret
  666.                                   
  667. runnian:        push ax     ;闰年查询子程序 ,余数存入cs:td3[20]
  668.             push bx
  669.                         push dx
  670.                         push word ptr cs:td3[0]
  671.                         push word ptr cs:td3[2]
  672.                         sub word ptr cs:td3[0],3030h
  673.                         sub word ptr cs:td3[2],3030h
  674.                         mov al,cs:td3[2]
  675.                     mov bl,10
  676.                         mul bl
  677.                         add al,cs:td3[3]
  678.                         mov cs:td3[2],al   ;46
  679.                         mov cs:td3[3],0
  680.                         mov al,cs:td3[1]
  681.                         mov bl,100
  682.                         mul bl
  683.                         add word ptr cs:td3[2],ax
  684.                         mov al,cs:td3[0]
  685.                         mov ah,0
  686.                         mov bx,1000
  687.                         mul bx
  688.                         add ax,word ptr cs:td3[2]
  689.                         mov bx,4
  690.                         mov dx,0
  691.                         div bx
  692.                         mov cs:td3[20],dl
  693.                         pop word ptr cs:td3[2]
  694.                         pop word ptr cs:td3[0]
  695.                         pop dx
  696.                         pop bx
  697.                         pop ax
  698.                         ret
  699.                        
  700. n_in9:                          ;待安装的int9中断例程 ,功能是比对是否制定的按键,并存入数据段内存的指定区域
  701.          push ax
  702.                  push bx
  703.                  push cx
  704.                  push si
  705.                  push di
  706.                  
  707.                  in al,60h
  708.                  pushf
  709.                  call dword ptr cs:[200h]
  710.                  jmp short n
  711.         ind1 db 2,3,4,5,6,7,8,9,0ah,0bh
  712.         ind2 db 1ch,4bh,4dh,1,0eh,0fh
  713.                  
  714. n:                 mov si,offset ind1-offset n_in9
  715.                  mov di,offset ind2-offset n_in9
  716.                  mov cx,10
  717.                  mov bx,0
  718. n1:                 cmp al,cs:[si+208h][bx]
  719.                  je in16
  720.                  inc bx
  721.                  loop n1
  722.                  
  723.                  mov bx,0
  724.                  mov cx,6
  725. n2:                 cmp al,cs:[di+208h][bx]
  726.                  je gnj
  727.                  inc bx
  728.                  loop n2
  729.                  jmp short n_end ;不是上列按键即返回

  730. in16:    cmp al,0bh
  731.          je in16_2
  732.                  add al,2fh
  733. in16_1:  mov cs:[204h],al   ;数字键转换ASCII码后存入205
  734.                  jmp short n_end
  735. in16_2:         add al,25h
  736.          jmp short in16_1
  737.                  
  738. gnj:                     ;功能键参数保存到1
  739.          mov cs:[206h],bl ; (4)位
  740. n_end:         pop di
  741.          pop si
  742.          pop cx
  743.          pop bx
  744.                  pop ax
  745.          iret         
  746.                  
  747. n_in9ok:                 nop


  748.                  code ends
  749.                  end setup
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 06:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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