应用:字符串的输入(1702)

简介: 本文为《汇编语言程序设计》1702小节例程。点击链接…进课程主页。任务:(见程序中注释) 程序:;最基本的字符串输入程序,需要具备下面的功能:;(1)在输入的同时需要显示这个字符串;;(2)一般在输入回车符后,字符串输入结束;;(3)能够删除已经输入的字符。

本文为《汇编语言程序设计》1702小节例程。点击链接…进课程主页。

任务:(见程序中注释)
程序:

;最基本的字符串输入程序,需要具备下面的功能:
;(1)在输入的同时需要显示这个字符串;
;(2)一般在输入回车符后,字符串输入结束;
;(3)能够删除已经输入的字符。

;编写一个接收字符串的输入子程序,实现上面三个基本功能。
;因为在输入的过程中需要显示,子程序的参数如下:
;       (dh)、(dl)=字符串在屏幕上显示的行、列位置;
;       ds:si 指向字符串的存储空间,字符串以O 为结尾符。


assume cs:code, ds:data
data segment
   db 32 dup (?)
data ends
code segment
start:
        mov ax, data
        mov ds, ax
        mov si, 0   ;设置字符串的存储空间
        mov dh, 12
        mov dl, 20  ;设置显示位置
        call getstr

return: mov ax,4c00h
        int 21h


;完整的接收字符串输入的子程序

getstr: push ax

getstrs:mov ah,0
        int 16h

        cmp al,20h
        jb nochar   ;小于20h,说明不是字符
        mov ah,0;
        call charstack;字符入栈
        mov ah,2
        call charstack;显示栈中的字符
        jmp getstrs


nochar:      ;处理非字符
        cmp ah,0eh;退格键的扫描码
        je backspace
        cmp ah,1ch;回车键的扫描码
        je enter
        jmp getstrs


backspace:   ;退格
        mov ah,1
        call charstack;字符出栈
        mov ah,2
        call charstack;显示栈中的字符
        jmp getstrs

enter:;回车
        mov al,0
        mov ah,0
        call charstack ;0入栈
        mov ah,2
        call charstack;显示栈中的字符

        pop ax
        ret ;getstr ends


;功能子程序实现
charstack:
     jmp short charstart
     table dw charpush,charpop,charshow
     top dw 0  ;栈顶
charstart:
        push bx
        push dx
        push di
        push es

        cmp ah,2
        ja sret
        mov bl,ah
        mov bh,0
        add bx,bx
        jmp word ptr table[bx]

charpush:mov bx,top
        mov [si][bx],al
        inc top
        jmp sret

charpop:cmp top,0
        je sret
        dec top
        mov bx,top
        mov al,[si][bx]
        jmp sret

charshow:mov bx,0b800h
        mov es,bx
        mov al,160
        mov ah,0
        mul dh
        mov di,ax
        add dl,dl
        mov dh,0
        add di,dx

        mov bx,0

charshows:cmp bx,top
        jne noempty
        mov byte ptr es:[di],' '
        jmp sret

noempty:mov al,[si][bx]
        mov es:[di],al
        mov byte ptr es:[di+2],' '
        inc bx
        add di,2
        jmp charshows

sret:   pop es
        pop di
        pop dx
        pop bx
        ret
code ends
end start
目录
相关文章
|
Windows
深入探究VC —— 链接器link.exe(4)
在程序编译完成后,生成的文件是以.obj为扩展名的对象文件,link.exe是将这些对象文件与库链接起来以创建可执行文件或动态链接库文件的工具。 link.exe的输入文件包括obj文件、lib文件、exp文件、def文件、res文件、txt文件、ilk文件等等,而输出的文件一般是exe文件、dll文件、sys文件等可执行程序文件。
1835 0
|
存储 JavaScript 前端开发
Vue中通过集成Quill富文本编辑器实现公告的发布。Vue项目中vue-quill-editor的安装与使用【实战开发应用】
文章展示了在Vue项目中通过集成Quill富文本编辑器实现公告功能的完整开发过程,包括前端的公告发布、修改、删除操作以及后端的数据存储和处理逻辑。
Vue中通过集成Quill富文本编辑器实现公告的发布。Vue项目中vue-quill-editor的安装与使用【实战开发应用】
|
数据安全/隐私保护 C++ 开发者
C++框架设计秘籍:解锁可扩展性的神奇密码,让你的代码无所不能!
【8月更文挑战第5天】在C++框架设计中,实现可扩展性至关重要以适应需求变化和新功能的加入。主要策略包括:使用接口与抽象类提供统一访问并允许多种实现;采用依赖注入分离对象创建与依赖管理;运用模板和泛型编程实现代码通用性;设计插件机制允许第三方扩展;以及利用配置文件和动态加载支持灵活的功能启用与模块加载。遵循这些实践能构建出更灵活、可维护及可扩展的框架。
172 1
若依修改,切换首页,改成自己想要跳转的login页
若依修改,切换首页,改成自己想要跳转的login页
|
Unix C++ 存储
cmake使用示例与整理总结
本文代码托管于github  cmake_demo cmake中一些预定义变量 PROJECT_SOURCE_DIR 工程的根目录 PROJECT_BINARY_DIR 运行cmake命令的目录,通常是${PROJECT_SOURCE_DIR}/build CMAKE_INCLUDE_...
1631 0
|
12天前
|
存储 弹性计算 人工智能
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
2025年9月24日,阿里云弹性计算团队多位产品、技术专家及服务器团队技术专家共同在【2025云栖大会】现场带来了《通用计算产品发布与行业实践》的专场论坛,本论坛聚焦弹性计算多款通用算力产品发布。同时,ECS云服务器安全能力、资源售卖模式、计算AI助手等用户体验关键环节也宣布升级,让用云更简单、更智能。海尔三翼鸟云服务负责人刘建锋先生作为特邀嘉宾,莅临现场分享了关于阿里云ECS g9i推动AIoT平台的场景落地实践。
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
|
4天前
|
云安全 人工智能 安全
Dify平台集成阿里云AI安全护栏,构建AI Runtime安全防线
阿里云 AI 安全护栏加入Dify平台,打造可信赖的 AI