汇编的两道题

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
相关推荐
我在人间贩卖青春6 天前
汇编之伪指令
汇编·伪指令
我在人间贩卖青春7 天前
汇编之伪操作
汇编·伪操作
济6177 天前
FreeRTOS基础--堆栈概念与汇编指令实战解析
汇编·嵌入式·freertos
myloveasuka7 天前
汇编TEST指令
汇编
我在人间贩卖青春7 天前
汇编编程驱动LED
汇编·点亮led
我在人间贩卖青春7 天前
汇编和C编程相互调用
汇编·混合编程
myloveasuka8 天前
寻址方式笔记
汇编·笔记·计算机组成原理
请输入蚊子8 天前
《操作系统真象还原》 第六章 完善内核
linux·汇编·操作系统·bochs·操作系统真像还原
myloveasuka8 天前
指令格式举例
汇编·笔记·计算机组成原理
我在人间贩卖青春8 天前
汇编之分支跳转指令
汇编·arm·分支跳转