字符串输入(汇编实现8086)

这篇博客详细介绍了如何使用8086汇编语言实现字符串输入功能,包括字符的压栈、弹栈、显示等操作。通过定义代码段、数据段,并设置跳转表来处理不同输入情况,实现键盘输入的处理和字符串的存储。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. assume cs:code 
  2. code segment 
  3. charstack: jmp short charstart
  4.        
  5. table dw charpush, charpop, charshow 
  6. top dw, 0
  7. charstart: push bx
  8.        push dx 
  9.        push di
  10.        push es
  11.     
  12.        cmp ah, 2
  13.        ja sret
  14.        mov bl, ah
  15.        mov bh, 0
  16.        add bx, bx   
  17.        jmp word ptr table[bx]
  18. charpush: mov bx, top
  19.       mov [si][bx],al
  20.       inc top 
  21.       jmp sret
  22. charpop: cmp pop, 0
  23.      je sret
  24.      dec top
  25.      mov bx, top
  26.      mov al, [si][bx]
  27.      jmp sret
  28. charshow: mov bx, 0b800h
  29.       mov es, bx
  30.       mov al, 160
  31.       mov ah, 0
  32.       mul dh
  33.       mov di, ax
  34.       add dl, dl 
  35.       mov dh, 0
  36.       add di, dx
  37.       mov bx, 0
  38. charshows: cmp bx, top
  39.        jne noempty
  40.        mov byte ptr es:[di], ''
  41.        jmp sret
  42.        
  43. noempty: mov al, [si][bx]
  44.      mov es:[di], al 
  45.      mov byte ptr es:[di + 2], ''
  46.      inc bx
  47.      add di, 2
  48.      jmp charshows
  49.         
  50. sret: pop es
  51.       pop di
  52.       pop dx
  53.       pop bx
  54.       ret                  
  55. getstr: push ax
  56.     mov dh, 0
  57.     mov dl, 0
  58.     
  59. getstrs: mov ah, 0
  60.      int 16h
  61.      cmp al, 20h
  62.      jb nochar 
  63.      mov ah, 0
  64.      call charstack
  65.      mov ah, 2
  66.      call charstack 
  67.      jmp charstrs
  68. nochar: cmp ah, 0eh
  69.     je backspace 
  70.     cmp ah, 1ch
  71.     je enter
  72.     jmp getstrs
  73. backspace: mov ah, 1
  74.        call charstack
  75.        mov ah, 2
  76. `      call charstack
  77.        jmp getstrs
  78. enter: mov al, 0
  79.        mov ah, 0
  80.        call charstack
  81.        mov ah, 2
  82.        call charstack
  83.        pop ax
  84.        
  85.     mov ax 4c00h ;不能使用ret返回主函数。
  86.     int 21h                      
  87. code ends
  88. end getstr
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值