ZKX's LAB

检测ax寄存器中数是否为正

2020-07-16知识14

编写一个程序、判断AX寄存器中存放的是正数。零还是负数。若AX大于0则输出POSITIVE。若AX SEG1 SEGMENTSTR1 DB 'POSITIVE$'STR2 DB 'ZERO$'STR3 DB 'NEGTIVE$'X DW+1;0;1SEG1 ENDSSEG2 SEGMENTSTART:MOV AX,SEG1MOV DS,AXMOV AX,XCMP AX,0JZ LINGJL FULEA DX,STR1JMP DISPLING:LEA DX,STR2JMP DISPFU:LEA DX,STR3DISP:MOV AH,9INT 21HEXIT:MOV AH,4CHINT 21HSEG2 ENDSEND START如何编写程序实现:用移位指令将AX中的数乘以10,结果保存在AX寄存器中? 编程序是指在利用电子计算机自动处理问题,人们根据自己对信息处理的要求,给电子计算机设计指令。先用带进位的左移DX 1次;然后BX清0,带进位循环左移BX 1次;再由移DX 1次;右移2位即可得到除4的效果;DX带进位的右移1次,带进位循环右移AX1次;带进位右移BX 1次,带进位的循环右移DX 1次,带进位循环右移AX1次最后那里把符号放回去。假设AX 和BX 寄存器中存放的是有符号数,为了判断AX 寄存器中的数据是否大于BX寄存器中的数据,应 正确答案:D执行下面的命令,AX寄存器中的数据是( )。 MOV AX,123H MOV D 参考答案:B编程将寄存器AX中的二进制数转换为ASCII码 结果放在ASCBUF开始的连续5个内存单元中 编程将寄存器AX中的二进制数转换为ASCII码 结果放在ASCBUF开始的连续5个内存单元中 编程将寄存器AX中的二进制数转换为ASCII码 结果放在ASCBUF开始的连续5个内存单元中 求试编一程序将AX寄存器中的数以十六进制形式在屏幕显示 已知两个字节变量A、B,求两个数的平均值,并以十六进制形式在屏幕上显示。DATA SEGMENTA DB 148;在这里写入:0~255B DB 28;在这里写入:0~255DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV AL,A;取来AMOV AH,0MOV BL,B;取来BMOV BH,0ADD AX,BX;相加.SHR AX,1;除以2DISP:;以16进制形式显示.MOV AH,0MOV BL,16DIV BLPUSH AXCMP AL,10JB A30ADD AL,7A30:ADD AL,30HMOV DL,ALMOV AH,2INT 21HPOP AXCMP AH,10JB A302ADD AH,7A302:ADD AH,30HMOV DL,AHMOV AH,2INT 21HMOV DL,'H'MOV AH,2INT 21HMOV AH,4CHINT 21HCODE ENDSEND START汇编编程:在AX寄存器中存放了一个二进制数,通过编程,将其数值在屏幕上进行显示 不要太复杂,刚学 告诉你一个思路利用循环左移指令,可以把AX的数字从高位开始左移到 标志位然后判断如果是1输出“1”否则输出“0”循环16次,可以显示完成可以用CX计数还要调用字符显示中断如何上机验证AX寄存器中的内容 最简单的办法,使用Turbo Debugger的T命令显示AX寄存器的内容。比如练习程序段如下:MOV BL,08HMOV CL,BLMOV AX,03FFHMOV BX,AXMOV DS:[0020H],BX计算机中为什么mov指令不能改变段寄存器,为什么不允许使用AX,CX,DX存放在EA中? 我不知道你说的mov改变段寄存器是采用的哪种方式。如果是直接立即数操作的话,这是不允许的。必须先把你想传递的值先传到AX,BX等寄存器或者存储器中,再间接传给段寄存器写出2条使ax寄存器内容为0的指令 MOV AX,0直接赋值SUB AX,AX这个就是AX=AX-AX,首先计算等号右边的值,然后将结果赋值给等号左边,很明显,等号右边等于0,所以AX=0。

#数据寄存器#段寄存器#计算机指令#dx#汇编指令

随机阅读

qrcode
访问手机版