微机实验第三章:子程序的程序的设计、堆栈段的设计和查找表(B站)


前言

作为一名在校大学生,我将近期所学的知识进行总结。
一年之后我再看这些代码,我发现这些代码对于初学者十分友好。因此,我将这些代码分享给大家,希望大家能有所收获。如有不足,欢迎交流。

推荐可以看这位B站up主的视频学习汇编

B站up主

提示:以下是本篇文章正文内容,下面案例可供参考

3.1 通过查表的方法实现十六进制数转换为 ASCII 码。

题目要求

通过查表的方法实现十六进制数转换为 ASCII 码。
XLAT : DS:[BX+AL]为地址,提取存储器中的一个字节再送入AL

程序代码和运行结果

代码如下(示例):

; multi-segment executable file template.

data segment
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  TABEL DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H  ;建立一个表,将0-9的ascall值存入
        DB 41H,42H,43H,44H,45H,46H                  ;这里是A-F的ascall
        
  HEX DB 3DH         ;定义一个内存空,存放一个十六进制
  
  ASCLL_H DB 00H     ;存放高位
  ASCLL_L DB 00H     ;存放低位 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ends

code segment
start:
; set segment registers:
    mov ax, data
    mov ds, ax
    mov es, ax

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
    ;查表指令的例子   
    ;注意:BX寄存器指向表的首地址     AL中个存放的代查的码,即某一项与表的首地址的偏移量
    
    MOV AL,HEX 
    AND AL,0FH   ;取出低位
    MOV BX,OFFSET TABEL   ;查表
    XLAT      
    MOV ASCLL_L,AL
    
    MOV AL,HEX 
    AND AL,0F0H   ;取出高位
    SHR AL,4      ;右移四位
    LEA BX,TABEL   ;查表
    XLAT           ;查表之后的ascall值存放在AL寄存器中
    MOV ASCLL_H,AL

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    
    mov ax, 4c00h ; exit to operating system.
    int 21h    
ends

end start ; set entry point and stop the assembler.

运行结果
请添加图片描述

3.2 通过查表的方法实现十六进制数转换为 ASCII 码。

题目要求

在3.1的基础上设计2个函数 HEX2ACSII 与DISPLAY_HEX
分别实现16进制到ACSII码的转换 以及打印转换后的ACSII码的功能,并利用上述函数将100-120的16进制数据进行打印

FUN_NAME PROC NEAR
……….
…………
RET
FUN_NAME ENDP
注意 (1)函数的输入与输出
(2)对函数中用到的寄存器进行保护

程序代码和运行结果

代码如下(示例):

; multi-segment executable file template.

data segment
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值