汇编的两道题

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
相关推荐
肖无疾9 小时前
在CE自动汇编里调用lua函数
汇编·lua·ce
冬瓜3122 天前
汇编点灯练习
汇编·arm
矮油0_o3 天前
30天开发操作系统 第 10 天 -- 叠加处理
开发语言·汇编·数据结构·c++·算法·操作系统
一品人家3 天前
win32汇编环境下,对话框程序中生成listview列表控件,点击标题栏自动排序的示例
汇编·windows·microsoft
一品人家4 天前
win32汇编环境下,提取对话框程序中,listview列表控件里的内容示例
汇编·microsoft
一品人家4 天前
win32汇编环境下,双击窗口程序内生成的listview列表控件的某行,并提取其内容的示例程序
汇编
代码巨匠4 天前
汇编指令总结、练习、C与汇编混合使用
汇编
Crossoads4 天前
【汇编语言】外中断(二)—— 键盘的奥秘:编写自己的 int 9 中断例程
android·开发语言·javascript·网络·汇编·机器学习·计算机外设
あjdc5 天前
基于汇编实现 hook objc_msgSend,统计方法耗时的方案
汇编·macos·ios·objective-c·cocoa
雪碧透心凉_5 天前
8086汇编(16位汇编)学习笔记03.汇编指令
汇编·笔记·学习