汇编的两道题

1.编写一个在显示器上显示一个笑脸字符的程序

看这段程序的结构,可以看出,每个代码段,带有segment的必须用ASSUME 来进行段分配。

cpp 复制代码
PROG1 SEGMENT;PROG1段的开始
	ASSUME CS:PROG1;PROG1(自己命名的,叫啥都可以)段对应代码段必须有段分配这步
START:
    MOV DL,1;将要显示的字符的的ASCII码值放到DL中
    MOV AH,02H;功能号02H调用,写2,02 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输出字符串功能,在屏幕上输出换行的作法

cpp 复制代码
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 小时前
ARMCC和gcc汇编文件互相转换的高效方法
汇编
JCBP_3 天前
QT(1)
开发语言·汇编·c++·qt
浩浩测试一下4 天前
06高级语言逻辑结构到汇编语言之逻辑结构转换 for (...; ...; ...)
汇编·数据结构·算法·安全·web安全·网络安全·安全架构
weixin_470740365 天前
某算法的python执行汇编
汇编·python·算法
small_wh1te_coder13 天前
GCC深度剖析:从编译原理到嵌入式底层实战
汇编·c++·面试·嵌入式·状态模式·c
白书宇14 天前
5.从零开始写LINUX内核--从实模式到保护模式的过渡实现
linux·汇编·数据库·开源
浩浩测试一下14 天前
02高级语言逻辑结构到汇编语言之逻辑结构转换 if (...) {...} else {...} 结构
汇编·数据结构·数据库·redis·安全·网络安全·缓存
蚰蜒螟15 天前
JVM安全点轮询汇编函数解析
汇编·jvm·安全
要记得喝水19 天前
汇编中常用寄存器介绍
开发语言·汇编·windows·c#·.net
技术领导力21 天前
华为开源CANN,再次释放“昇腾转向”信号
汇编