ZKX's LAB

PLC DMOV 32位寄存器提示超出范围的问题 寄存器显示两位十进制数

2020-08-12知识18

编写一个程序,将BX寄存器中16位带符号数按十进制形式显示在计算机的屏幕上 data segmentnum dw-28971decasc db 6 dup('0')endsstack segment para stackdw 128 dup(0)endscode segmentstart:mov ax,datamov ds,axmov bx,numand bx,bxjns next1;判断正负mov decasc,'-'neg bx;是负数,则求其相反数next1:mov si,5;将二进制数转换成十进制数的ASCII码mov ax,bxmov cx,5mov di,10next2:xor dx,dxdiv dior dl,30hmov decasc[si],dldec siloop next2mov cx,5mov si,0mov dl,decasc[si]cmp dl,'-';若是负数,则显示负号,正数不显示符号jne next3mov ah,02hint 21hnext3:;跳过前导0inc simov dl,decasc[si]cmp dl,'0'jne next4loop next3next4:mov ah,02h;显示有效数字,若BX为0,则只显示0int 21hinc simov dl,decasc[si]jcxz next5loop next4next5:mov ax,4c00h;exit to operating system.int 21hendsend start设寄存器位数为8位,机器数采用补码形式(一位符号位),对应于十进制数-27,寄存器内是多少, 27二进制:1001 1011反码:1110 01001 变成补码:1110 0101设机器数采用补码形式(含1位符号位),若寄存器内容为9BH,则对应的十进制数为_________。 8位补码9BH=10011011B,减1等于9AH=10011010B,取反等于=65H=01100101B=6D*16D+5D=101D所以对应的十进制数为-101PLC DMOV 32位寄存器提示超出范围的问题 共2 关注 追问追答 知道 提问 搜一搜 。举报反馈 战队 PLC DMOV 32位寄存器提示超出。sh-gxdq.com 广告 automation.com.cn广告 向网友提问 微信怎么把输入的8位2进制数显示3位十进制数在数码管上,最好有直接的电路图 要用数字电路来实现,这个题目比较难做的。因为,要显示3位十进制数,需要用BCD码译码器译码后驱动数码管,而译码器要加四位的BCD码,所以,首先要把8位二进制数转换成3组四位的BCD码,变成12位。就是要实现二进制数转BCD码。要用单片机来做,就很简单很容易的。汇编语言:编写一个程序,显示AL寄存器中的两位十六进制数 data segmentdata endsstack segmentdb 256 dup?stack endscode segmentassume cs:code,ds:data,ss:stackstart:mov ax,datamov ds,axmov ax,stackmov ss,axmov al,0c5hcall disp_almov al,065hcall disp_almov ah,04chint 21hdisp_al子程序将寄存器AL中的数值以十六进制显示出来disp_al:mov dh,almov bx,2;bx用于循环,一个字节最多可以显示成两个字符,所以循环次数是2次mov cl,4;首先显示高4位,在下次循环进再显示低4位shr al,clagain:and al,0fhcmp al,9ja hexadd al,'0';如果小于9,加上字符'0'将数字转换字符jmp disphex:sub al,10;如果大于9,先减去10,再加上字符'A',就可以将数字转换成相应的'A'~'F'add al,'A'disp:;利用中断显示字符mov dl,almov ah,02hint 21hmov al,dhdec bxtest bx,bxjnz againretcode endsend start如何用C语言将寄存器里的数以十进制的形式显示出来 register int i=123;printf(\"%d\",i);

#modbus协议#地址#补码#二进制

随机阅读

qrcode
访问手机版