1、 MOV AX, 1234H MOV BX, 55AAH MOV CX, 6789H

MOV DX, AX ; 将AX的值备份到DX中

AND AX, 0FF00H ; 取出AX的中间8位 NOT AX ; 中间8位取反 SHR AX, 8 ; 将结果移回原位

AND BX, 0FH ; 取出BX的低4位 SHL BX, 8 ; 将结果移动到新数的低4位位置

AND CX, 0F000H ; 取出CX的高4位 SHR CX, 8 ; 将结果移动到新数的高4位位置

OR AX, BX ; 将三个部分组合成一个新数 OR AX, CX MOV [DI], AX ; 将新数存储到数据段中

2、 MOV DX, AX ; 将原数备份到DX:AX中 SHR DX, 2 ; 右移两位,相当于除以4 SHR AX, 2 MOV AX, DX ; 将商的整数部分存回AX中 XOR DX, DX ; 将余数清零

3、 ; 二进制输出 MOV CX, 16 ; 循环16次,输出16位二进制数 MOV DL, '0' ; 初始化DL为字符'0' BIT_LOOP: MOV AH, 2 ; 调用DOS功能2,输出单个字符 AND BX, 8000H ; 取出BX的最高位 JZ ZERO ; 如果最高位为0,跳过输出'1' MOV DL, '1' ; 如果最高位为1,输出'1' ZERO: INT 21H ; 输出字符 SHL BX, 1 ; 将BX左移一位,相当于除以2 LOOP BIT_LOOP ; 循环

; 十六进制输出 MOV AH, 2 MOV DL, '0' MOV CL, 4 ; 循环4次,输出4位十六进制数 HEX_LOOP: MOV AL, BH ; 将BX的高字节存入AL中 SHR AL, CL ; 右移CL位,取出一位十六进制数 AND AL, 0FH ; 只保留低4位 CMP AL, 9 ; 判断是否为数字 JBE NUM ; 如果是数字,直接输出 ADD AL, 7 ; 如果是字母,将其转换为字符 NUM: ADD AL, '0' ; 将数值转换为字符 MOV DL, AL ; 存储到DL中 INT 21H ; 输出字符 SUB CL, 4 ; 将CL减4,处理下一位 JNZ HEX_LOOP ; 如果还有位数,继续循环

; 十进制输出 MOV AH, 0 ; 初始化AH为0 MOV SI, 10000 ; 初始化SI为最高位的权值 MOV DL, '0' ; 初始化DL为字符'0' DECIMAL_LOOP: MOV AH, 0 ; 初始化AH为0 DIV SI ; 将BX除以SI,商存入AL,余数存入AH ADD DL, AL ; 将商的字符加入DL中 CMP DL, '0' ; 判断是否需要输出 JZ SKIP ; 如果是0,跳过输出 MOV AH, 2 ; 调用DOS功能2,输出单个字符 INT 21H ; 输出字符 SKIP: SUB DL, AL ; 将商的字符从DL中减去 MOV AL, SI ; 将SI右移一位,相当于除以10 SHR AL, 1 MOV SI, AX ; 将新的权值存回SI中 CMP SI, 0 ; 判断是否已经处理完最低位 JNZ DECIMAL_LOOP ; 如果还未处理完,继续循环

1、已知AX=1234HBX=55AAHCX=6789H写一段程序实现:将AX寄存器中的中间8位取反、BX的低4位和CX的高4位分别作为新数的中间8位、低4位、高4位拼接成一个新字送到数据段中以DI为偏移地址的字存储单元中。2、已知DX:AX存放有一个32位无符号数试写一段程序实现将其除以4结果存DXAX中商的整数部分。3、已知以BX=76ADH编写3个程序分别实现将BX的值以1二进制2十六进制3

原文地址: https://www.cveoy.top/t/topic/bJLe 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录