汇编的两道题

本文详细介绍了如何使用汇编语言编写一个程序,包括在显示器上显示笑脸字符,以及通过键盘输入获取10进制数字并计算其平方值的过程,涉及段分配、INT21H中断调用和数据结构的使用。
摘要由CSDN通过智能技术生成

1.编写一个在显示器上显示一个笑脸字符的程序
看这段程序的结构,可以看出,每个代码段,带有segment的必须用ASSUME 来进行段分配。

PROG1 SEGMENT;PROG1段的开始
	ASSUME CS:PROG1;PROG1(自己命名的,叫啥都可以)段对应代码段必须有段分配这步
START:
    MOV DL,1;将要显示的字符的的ASCII码值放到DL中
    MOV AH,02H;功能号02H调用,写202 02H都行,显示单个字符
    int 21H ;DOS功能号调用匹配的中断  20H为程序结束中断,可返回DOS操作。
    MOV AH,4CH;DOS程序终止,为DOS功能号,AL通常设置为0
    INT 21H;因为调用了DOS 功能,所以要用INT 21H
PROG1 ENDS;段结束
    END START

对于start的问题。
Start只是一个标号,可以改名字。
表示程序的开始 end start 就是结束,
也有的用main的
2.通过人机对话,从键盘输入一个10进制数字(0~9),查表求键入数字的平方值,存入AL寄存器中,并显示有关的提示信息。试编写汇编语言程序
有点不明白 0DH,0AH,‘$'的作用:
这是把dos系统里的换行(0dh),回车(0ah)组成一个字符串,利用21h,-09h输出字符串功能,在屏幕上输出换行的作法

DATAS SEGMENT
    TABLE DB 0,1,4,9,16,25,36,49,64,81;数字0~9的平方值
    BUF DB 'please input a number(0~9):',0DH,0AH,'$';提示信息
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX;设置DX
    MOV DX,OFFSET BUF;设置DX,使字符串首地址=DS:DX
    MOV AH,9H;显示以$结尾的字符串
    INT 21H
    MOV AH,01H;等待输入字符
    INT 21H
    AND AL,0FH 
    MOV BX,OFFSET TABLE;BX指向表头地址TABLE
    MOV AH,0;AX高位字节清零
    ADD BX,AX;表头地址+键入数字AL,结果存入BX
    MOV AL,[BX];查表求得平方值

    MOV AH,4CH
    INT 21H
CODES ENDS
    END START

  • 11
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 用汇编语言实现将BUF字节单元中的数拆成高低四位,并将分离出的高四位和低四位分别放于BUF+1和BUF+2字节单元的低四位上,可以按照以下步骤进行: 1. 将BUF的起始地址存储到寄存器中; 2. 使用循环,对BUF中的每个字节进行遍历; 3. 对于每个字节,使用位运算指令将它的高四位和低四位分离出来,并分别储存在两个寄存器中; 4. 使用存储指令将高四位和低四位分别存储到BUF+1和BUF+2字节单元的低四位上; 5. 使用寄存器移动指令,将指向BUF的寄存器指向下一个字节,以便进行下一次循环。 以下是一个示例代码: ``` MOV R0, #BUF ; 将BUF的起始地址存储到R0寄存器中 MOV R1, #0 ; 初始化循环计数器为0 LOOP: LDRB R2, [R0], #1 ; 从BUF中读取一个字节,R0指向下一个字节 MOV R3, R2, LSR #4 ; 取出字节的高四位 STRB R3, [R0, #1] ; 将高四位存储到BUF+1字节单元的低四位上 MOV R3, R2, AND #0x0F ; 取出字节的低四位 STRB R3, [R0, #2] ; 将低四位存储到BUF+2字节单元的低四位上 ADD R1, R1, #1 ; 循环计数器+1 CMP R1, #BUF_SIZE ; 比较循环计数器与BUF_SIZE的大小 BNE LOOP ; 如果循环计数器没有达到BUF_SIZE,继续循环 ``` 在上面的代码中,我们使用了LDRB指令从BUF中读取一个字节,使用MOV指令和位运算指令分离出字节的高四位和低四位,然后使用STRB指令将它们存储到BUF+1和BUF+2字节单元的低四位上。同时,我们使用了ADD指令将循环计数器+1,使用CMP指令比较循环计数器与BUF_SIZE的大小,使用BNE指令实现循环。 ### 回答2: 使用汇编语言思想解决问需要经过以下步骤: 1. 理解目:首先要完全理解这道目的要求和要解决的问。 2. 划分模块:根据目要求,将解决问的过程划分为多个模块。 3. 设计数据结构:根据目要求,设计适当的数据结构来存储数据和结果。 4. 设计算法:根据目要求,设计算法来实现每个模块功能。 5. 编写代码:根据设计好的算法和数据结构,用汇编语言编写代码。 6. 调试测试:编写完成后,对代码进行调试和测试,确保代码的正确性和功能的实现。 7. 优化改进:如果有必要,可以对代码进行优化和改进,提高代码的执行效率和性能。 总之,使用汇编语言思想来解决问需要全面理解目和问要求,划分模块,设计数据结构和算法,编写代码,并经过调试测试和优化改进等步骤,最终实现问的解决。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值