汇编语言中怎么把运算结果输出到屏幕上啊? 在网上找了很多太复杂了,有简单点的么?

以下程序是照着书本敲上去的,但是没有输出,请问怎么输出最大值MAX的值?
DATA SEGMENT
BUF DB 1,2,3,4,5,6,7,8,9
COUNT EQU $-BUF
MAX DB ?
DATA ENDS

STACK SEGMENT
DB 256 DUP(?)
TOP LABEL WORD
STACK ENDS

CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK
START:
MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
LEA SP,TOP

MOV BX,OFFSET BUF
MOV AL,[BX]
MOV CX,COUNT-1

ALP: INC BX
CMP AL,[BX]
JAE NEXT
MOV AL,[BX]

NEXT: LOOP ALP

MOV MAX,AL

MOV DL,MAX
MOV AH,02h
INT 21H

MOV AH,4CH
INT 21H
CODE ENDS
END START
功能是找出BUF中最大的那个数

这个程序有两处错误:

1. CODE SEGMENT 后面的ASSUME 应当另起一行

2. 算法中直接将MAX送到DL并输出到屏幕,用了下面的三条指令:
MOV DL, MAX
MOV AH, 02H
INT 21H
这么处理屏幕上是不会显示正确结果的。

不能显示的原因是:使用02H号DOS系统功能调用时,DL中的应当是字符的ASCII码。而你的MAX中存的是二进制的数值,不是这个数值对应字符的ASCII码值。

所以,对于不大于9的二进制数,只要加一条指令将二进制数转成该数的ASCII码值就可以正常显示了。
上面的三条指令改成这样:
MOV DL, MAX
ADD DL, 30H
MOV AH, 02H
INT 21H

你这么改一下再试试看
温馨提示:内容为网友见解,仅供参考
无其他回答

汇编语言中把数据打印到屏幕上的指令是什么啊?急求答案
汇编语言能把数据打印到屏幕上的指令有以下几个:1 mov ah,01h;键盘输入一个字符保存在al里,比如说“2”,那么它将会以“32”的形式被保存 ;在al里面,其中“32”是十六进制的 int 21h ;这样就完成了一个dos的01号功能调用 2 mov ah,02h;这是现实dl里面的字符的,如:mov...

汇编语言中为啥不能显示结果在屏幕上
很多汇编,都有支持输出使用的宏或子程序,帮我们简化输出代码。(实在没有,自己写个显示子程序就OK拉)如:我见过一种汇编, output Str 就能把Str的内容显示到屏幕上。从能力上来说,你凡事能用高级语言实现的功能,汇编都能实现,毋庸置疑,只是汇编比较消耗体力而已。Good Luck!

汇编语言如何将数值以十进制的形式输出到屏幕上
设置一字符串sBuf长度为14满足最大长度就OK 看你的数值长度,如果2字节的,即0~65535的值,可以用以下代码。要转换的放到AX里,字符串尾放SI里 MOV AX,VAL XOR DX,DX MOV BX,10 AGAIN: DIV BX ADD AL,30H MOV [SI],AL DEC SI XOR AX,AX CMP DX,0 JNZ AGAIN:之后把SI所指向的字符串...

汇编语言中,如何有9号调用功能把变量输出到屏幕上
2号功能可以输出字符,其实就是输入一个8位数,所以,比如现在你有一个变量,可以按如下方式输出:s db 21h ;你定义的变量 lea ax,s mov dl,[ax]mov ah,2 int 21h 如下即可,不过,如果是不可显示字符,比如是负数,在屏幕上是显示不出来的 ...

如何使用汇编语言程序设计方法在屏幕上输出汉字?
最好有原代码!注意是在屏幕上输出汉字(王卓齐)!(输出英文及数字的我自己写出来了)貌似输出汉字在局部要修改下!希望大家帮下忙。。我先谢谢了... 最好有原代码!注意是在屏幕上输出汉字(王卓齐)!(输出英文及数字的我自己写出来了)貌似输出汉字在局部要修改下!希望大家帮下忙。。我先谢谢了 展开  我来答...

在汇编语言中哪个中段是输出数字的?
没法直接输出数字,想要输出数字就要把数字转化成对应的ASCII字符,比如你要在屏幕输出一个‘7’,你就要把‘7’的ascii码(37)写入DL寄存器,然后调用int 21h中断的字符输出功能,功能号是02,即AH=02h时执行int 21h命令。输出数字串也可以。要用DS:DX指向已经转换成ascii的待输出数字字符串地址,字符...

汇编语言怎样将内存中的数据在屏幕上以十六进制形式显示出来
以前回答过本题目。但是,已经打不开了。后来,有人留言,还想得到此题的答案。为此,重新解答如下:本程序运行的结果,是显示:3A4F。

用汇编语言编写一段程序实现两个六位的十进制数的加法,把运算结果...
push cx ;结果放入堆栈,等待输出 inc si cmp si, num-1 ;循环,读完所有数 jb l2 mov ch, ah lea dx, res mov ah, 09h int 21h add ch, 30h output ch mov al, 0 outl: ;输出结果循环 pop cx output ch output cl inc al cmp al, num\/2 jb outl quit: ;退出 mov...

汇编语言中如何将十六进制数结果转换成十进制字符输出?
屏幕输出有文本方式和图形(像素)方式.如输出字符一般采用文本方式,此时只要把要显示的字符转化成对应的ASCII码,再写到显存中就可以在屏幕上看到想要的东西了.而写到显存方式又可以用中断调用或直接写入法.如要在屏幕上输出15,则要把15转化成31H和35H,然后分别把31H和35H写到显存就好.比如用中断调用方式...

将al中的数以八进制形式输出到屏幕上(用汇编语言)
INT 21H ;键入到 AL CMP AL, 13 JE EXIT CALL OUT_BIN JMP IN_CHAR ;--- EXIT:MOV AH, 4CH INT 21H ;返回DOS ;--- OUT_BIN: ;以二进制显示AL内容 MOV BL, AL LEA DX, MSG2 MOV AH, 9 INT 21H MOV AH, 2 MOV CX, 8 LP1:M...

相似回答