从键盘上输入4个16进制数

合集下载

编程题 试卷3

编程题 试卷3

一、分析题(每题4分,共320分)1. 设X、Y、Z、R、W均为存放16位带符号数单元的地址,编一段程计算: Z←(W*X)/(Y+6),R←余数。

2.3. 把AX中存放的16位二进制数K看作8个二进制的“四分之一”字节。

试编写程序数一下值为3的四分之一字节数,并将该数显示出来。

4. 变量X为带符号整数,按下面的要求编制程序:(1)如果X的绝对值大于5,变量FX赋值为0(2)如果X的绝对值不大于5,变量FX的值为1-X.5. 根据AL寄存器中哪一位为1(从低位到高位)把程序转移到8个不同的程序分支中去.(用变址寻址的方式实现跳跃表法的程序)6. 设在某一个位移量测试系统当中,需通过位移传感器循环检测16位位移量。

每次检测的位移量通过A/D转换后获得的数值在-128—+127之间。

现需对位移量进行线性补偿。

设已有三个补偿子程序BS1,BS2,BS3。

设计规定则由BS3完成。

逻辑尺控制法,实现上述问题的循环程序设计。

7. 在BUF1和BUF2两个数据区中,各定义有10个带符号字数据,编制一段程序,求它们对应项的绝对值之和,并将和数存入以SUM为首地址的数据区中。

8. 试编制一个汇编语言程序求出首地址为DATA的100D字数组中的最小偶数,并把它存放在AX中.9. 使AL高4位置1,判断低4位是否大于9,如大于9,则使低4位变反,否则将低4位置成9,试编程实现之。

10. 在首地址为TABLE的数组中按递增次序存放着100(16进制)个16位补码数,试编写一个汇编语言程序把出现次数最多的数及出现次数分别存放于AX,CX中.11. 设A和B缓冲区中是两个以若干个文本行组成的文本文件(文本文件以1AH结束),每个文本行以回车符(0DH)和换行符(0AH)结束。

试编写一程序,以行为单位依次比较,如果两行相等,则往下比较;如果两行不相等,则显示这两行的行号和内容。

12. 编写一段程序,将AL中的第7位和第0位、第6位和第1位、第5位和第2位、第4位和第3位互换。

蓝桥杯基础练习

蓝桥杯基础练习

1. 数列排序问题描述给定一个长度为n的数列,将这个数列按从小到大的顺序排列。

1<=n<=200输入格式第一行为一个整数n。

第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000。

输出格式输出一行,按从小到大的顺序输出排序后的数列。

样例输入58 3 6 4 9样例输出3 4 6 8 92.十六进制转八进制问题描述给定n个十六进制正整数,输出它们对应的八进制数。

输入格式输入的第一行为一个正整数n (1<=n<=10)。

接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。

输出格式输出n行,每行为输入对应的八进制正整数。

注意输入的十六进制数不会有前导0,比如012A。

输出的八进制数也不能有前导0。

样例输入239123ABC样例输出714435274提示先将十六进制数转换成某进制数,再由某进制数转换成八进制。

3.十六进制转十进制问题描述从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。

注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。

样例输入FFFF样例输出655354.十进制转十六进制问题描述十六进制数是在程序设计时经常要使用到的一种整数的表示方式。

它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16个符号,分别表示十进制数的0至15。

十六进制的计数方法是满16进1,所以十进制数16在十六进制中是10,而十进制的17在十六进制中是11,以此类推,十进制的30在十六进制中是1E。

给出一个非负整数,将它表示成十六进制的形式。

输入格式输入包含一个非负整数a,表示要转换的数。

0<=a<=2147483647输出格式输出这个整数的16进制表示样例输入30样例输出1E5.特殊回文数问题描述123321是一个非常特殊的数,它从左边读和从右边读是一样的。

二进制,十六进制,八进制的换算

二进制,十六进制,八进制的换算

0,16,2进制的互相转换所谓16进制,就是由0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F共16个数字组成。

逢16进⼀位,下⾯就讲讲在没有任何⼯具的情况下如何将⼀10进制转化为16进制:1000除以16得62余8,那么最低位为8,再将62除以16得3余14,那么倒数第2为E(14对于16进制来说是E),3⽐16⼩了,所以不⽤继续除了,总的就是3E8,为1000的16进制数。

想要将16进制的数转化为10进制,只需将上⾯的步骤反过来做就可以了。

不⽤我多说吧!2进制仅由0、1两个数字组成,逢1进⼀。

要将⼀10进制化为2进制,介绍⼀个简单的⽅法,先将10进制的数化为16进制,再化为2进制,举个例⼦:515对应16进制为203H,将203转为2进制则为0010(2) 0000(0) 0011(3),⼀个位数对2进制来说是4个字符。

0H就是0000、1H就是0001、……、0EH就是1110、OFH为1111,⼤家可⾃⼰推⼀下。

总之⼤家⼀定要熟练掌握各个进制的互相转化,尤其是100以内10--16和16--10的互相转化要记住。

16-10H、32-20H、48-30H、64-40H、80-50H、96-60H、100-64H,255-FFH,65535-FF FFH,1677万-FF FF FFH,前为10进制,后有H的为16进制,这些能记住,以后修改就⽅便许多了。

⼆进制⼆进制是逢2进位的进位制,0、1是基本算符。

现代的电⼦计算机技术全部采⽤的是⼆进制,因为它只使⽤0、1两个数字符号,⾮常简单⽅便,易于⽤电⼦⽅式实现。

⼆进制四则运算规则 加法 0+0=0,0+1=1+0=1,1+1=10 减法 0-0=0,1-0=1,1-1=0,0-1=-1 乘法 0×0=0,0×1=1×0=0,1×1=1 除法 0÷1=0,1÷1=1⼀、什么是⼆进制 在现实⽣活和记数器中,如果表⽰数的“器件”只有两种状态,如电灯的“亮”与“灭”,开关的“开”与“关”。

键盘按键对应的十六进制编码

键盘按键对应的十六进制编码

键盘按键对应的十六进制编码键盘按键对应的十六进制编码是一个固定的映射关系,用于表示每个按键在计算机中的唯一标识。

以下是一些常见的键盘按键及其对应的十六进制编码(也称为扫描码或虚拟键码):0x08:Backspace键(退格键)0x09:Tab键(制表键)0x0C:Clear键(数字键盘上的5,当Num Lock关闭时)0x0D:Enter键(回车键)0x10:Shift键(左或右Shift键)0x11:Ctrl键(左或右Ctrl键)0x12:Alt键(左或右Alt键)0x13:Pause键(暂停键)0x14:Caps Lock键(大写锁定键)0x1B:Esc键(逃逸键)0x20:Spacebar键(空格键)0x21:Page Up键(向上翻页键)0x22:Page Down键(向下翻页键)0x23:End键(结束键)0x24:Home键(起始键)0x25:LEFT ARROW键(左箭头键)0x26:UP ARROW键(上箭头键)0x27:RIGHT ARROW键(右箭头键)0x28:DOWN ARROW键(下箭头键)0x29:Select键(选择键)0x2A:Print键(打印键)0x2B:Execute键(执行键)0x2D:Insert键(插入键)或Num Lock关闭时的数字键盘00x2E:Delete键(删除键)或Num Lock关闭时的数字键盘.0x2F:Help键(帮助键)此外,字母、数字和特殊字符键(如A-Z、0-9、@、#等)的编码通常从0x30开始,每个键都有一个唯一的编码。

例如,0x41代表A键,0x42代表B键,依此类推。

需要注意的是,这些编码值可能会因不同的操作系统、编程语言和键盘布局而有所差异。

因此,在特定上下文中使用时,请确保查阅相关文档以获取准确的映射关系。

键盘十六进制编码

键盘十六进制编码
75 3d 61 = 175 7d 125 }
76 3e 62 > 176 7e 126 ~
77 3f 63 ? 177 7f 127 del
5 ENQ 37 % 69 E 101 e
6 ACK 38 & 70 F 102 f
7 BEL 39 , 71 G 103 g
8 BS 40 ( 72 H 104 h
9 HT 41 ) 73 I 105 i
10 LF 42 * 74 J 106 j
11 VT 43 + 75 K 107 k
12 FF 44 , 76 L 108 l
13 CR 45 - 77 M 109 m
14 SO 46 . 78 N 110 n
15 SI 47 / 79 O 111 o
16 DLE 48 0 80 P 112 p
17 DCI 49 1 81 Q 113 q
18 DC2 50 2 82 R 114 r
30 18 24 can 130 58 88 X
31 19 25 em 131 59 89 Y
32 1a 26 sub 132 5a 90 Z
33 1b 27 esc 133 5b 91 [
34 1c 28 fs 134 5c 92 \
35 1d 29 gs 135 5d 93 ]
67 37 55 7 167 77 119 w
70 38 56 8 170 78 120 x
71 39 57 9 171 79 121 y
72 3a 58 : 172 7a 122 z
73 3b 59 ; 173 7b 123 {
74 3c 60 < 174 7c 124 |

键盘十六进制编码

键盘十六进制编码

键盘十六进制编码ASCII表ASCII值控制字符 ASCII值控制字符 ASCII值控制字符ASCII值控制字符0 NUT 32 (space) 64 @ 96 、1 SOH 33 ! 65 A 97 a2 STX 34 ” 66 B 98 b3 ETX 35 # 67 C 99 c4 EOT 36 $ 68 D 100 d5 ENQ 37 % 69 E 101 e6 ACK 38 & 70 F 102 f7 BEL 39 , 71 G 103 g8 BS 40 ( 72 H 104 h9 HT 41 ) 73 I 105 i10 LF 42 * 74 J 106 j11 VT 43 + 75 K 107 k12 FF 44 , 76 L 108 l13 CR 45 - 77 M 109 m14 SO 46 . 78 N 110 n15 SI 47 / 79 O 111 o16 DLE 48 0 80 P 112 p17 DCI 49 1 81 Q 113 q18 DC2 50 2 82 R 114 r19 DC3 51 3 83 X 115 s20 DC4 52 4 84 T 116 t21 NAK 53 5 85 U 117 u22 SYN 54 6 86 V 118 v23 TB 55 7 87 W 119 w24 CAN 56 8 88 X 120 x25 EM 57 9 89 Y 121 y26 SUB 58 : 90 Z 122 z27 ESC 59 ; 91 [ 123 {28 FS 60 < 92 \ 124 |29 GS 61 = 93 ] 125 }30 RS 62 > 94 ^ 126 ~31 US 63 ? 95 — 127 DELNUL VT 垂直制表 SYN 空转同步SOH 标题开始 FF 走纸控制 ETB 信息组传送结束STX 正文开始 CR 回车 CAN 作废ETX 正文结束 SO 移位输出 EM 纸尽EOY 传输结束 SI 移位输入 SUB 换置ENQ 询问字符 DLE 空格 ESC 换码ACK 承认 DC1 设备控制1 FS 文字分隔符BEL 报警 DC2 设备控制2 GS 组分隔符BS 退一格 DC3 设备控制3 RS 记录分隔符HT 横向列表 DC4 设备控制4 US 单元分隔符LF 换行 NAK 否定 DEL 删除键盘常用ASCII码ESC键 VK_ESCAPE (27)回车键: VK_RETURN (13)TAB键: VK_TAB (9)Caps Lock键: VK_CAPITAL (20)Shift键: VK_SHIFT ($10)Ctrl键: VK_CONTROL (17)Alt键: VK_MENU (18)空格键: VK_SPACE ($20/32)退格键: VK_BACK (8)左徽标键: VK_LWIN (91)右徽标键: VK_LWIN (92)鼠标右键快捷键:VK_APPS (93)Insert键: VK_Insert (45)Home键: VK_HOME (36)Page Up: VK_PRIOR (33) PageDown: VK_NEXT (34)End键: VK_END (35)Delete键: VK_Delete (46)方向键(←): VK_LEFT (37)方向键(↑): VK_UP (38)方向键(→): VK_RIGHT (39)方向键(↓): VK_DOWN (40)F1键: VK_F1 (112)F2键: VK_F2 (113)F3键: VK_F3 (114)F4键: VK_F4 (115)F5键: VK_F5 (116)F6键: VK_F6 (117)F7键: VK_F7 (118)F8键: VK_F8 (119)F9键: VK_F9 (120)F10键: VK_F10 (121)F11键: VK_F11 (122)F12键: VK_F12 (123)Num Lock键: VK_NUMLOCK (144) 小键盘0: VK_NUMPAD0 (96)小键盘1: VK_NUMPAD0 (97)小键盘2: VK_NUMPAD0 (98)小键盘3: VK_NUMPAD0 (99)小键盘4: VK_NUMPAD0 (100) 小键盘5: VK_NUMPAD0 (101) 小键盘6: VK_NUMPAD0 (102) 小键盘7: VK_NUMPAD0 (103) 小键盘8: VK_NUMPAD0 (104) 小键盘9: VK_NUMPAD0 (105) 小键盘.: VK_DECIMAL (110)小键盘*: VK_MULTIPLY (106)小键盘+: VK_MULTIPLY (107)小键盘-: VK_SUBTRACT (109)小键盘/: VK_DIVIDE (111)Pause Break键: VK_PAUSE (19) Scroll Lock键: VK_SCROLL (145)八进制十六进制十进制字符八进制十六进制十进制字符00 00 0 nul 100 40 64 @01 01 1 soh 101 41 65 A02 02 2 stx 102 42 66 B03 03 3 etx 103 43 67 C04 04 4 eot 104 44 68 D05 05 5 enq 105 45 69 E06 06 6 ack 106 46 70 F07 07 7 bel 107 47 71 G11 09 9 ht 111 49 73 I12 0a 10 nl 112 4a 74 J13 0b 11 vt 113 4b 75 K14 0c 12 ff 114 4c 76 L15 0d 13 er 115 4d 77 M16 0e 14 so 116 4e 78 N17 0f 15 si 117 4f 79 O20 10 16 dle 120 50 80 P21 11 17 dc1 121 51 81 Q22 12 18 dc2 122 52 82 R23 13 19 dc3 123 53 83 S24 14 20 dc4 124 54 84 T25 15 21 nak 125 55 85 U26 16 22 syn 126 56 86 V27 17 23 etb 127 57 87 W30 18 24 can 130 58 88 X31 19 25 em 131 59 89 Y32 1a 26 sub 132 5a 90 Z33 1b 27 esc 133 5b 91 [34 1c 28 fs 134 5c 92 \35 1d 29 gs 135 5d 93 ]36 1e 30 re 136 5e 94 ^37 1f 31 us 137 5f 95 _40 20 32 sp 140 60 96 '41 21 33 ! 141 61 97 a42 22 34 " 142 62 98 b43 23 35 # 143 63 99 c44 24 36 $ 144 64 100 d45 25 37 % 145 65 101 e47 27 39 ` 147 67 103 g50 28 40 ( 150 68 104 h51 29 41 ) 151 69 105 i52 2a 42 * 152 6a 106 j53 2b 43 + 153 6b 107 k54 2c 44 , 154 6c 108 l55 2d 45 - 155 6d 109 m56 2e 46 . 156 6e 110 n57 2f 47 / 157 6f 111 o60 30 48 0 160 70 112 p61 31 49 1 161 71 113 q62 32 50 2 162 72 114 r63 33 51 3 163 73 115 s64 34 52 4 164 74 116 t65 35 53 5 165 75 117 u66 36 54 6 166 76 118 v67 37 55 7 167 77 119 w70 38 56 8 170 78 120 x71 39 57 9 171 79 121 y72 3a 58 : 172 7a 122 z73 3b 59 ; 173 7b 123 {74 3c 60 < 174 7c 124 |75 3d 61 = 175 7d 125 }76 3e 62 > 176 7e 126 ~77 3f 63 ? 177 7f 127 del。

微机原理及接口第四章习题答案

微机原理及接口第四章习题答案

“微机系统原理与接口技术”第四章习题解答1.判断以下说法是否正确,如有错,请说明原因并改正。

(1)伪指令在汇编过程中不会产生二进制代码。

(2)宏和过程的相同之处是都可用于简化源程序书写、精简目标代码。

(3)在计算机中,高级语言通常需要转换为汇编语言后才能执行。

(4)汇编语言程序上机一般包括编辑、汇编、链接和调试几个步骤。

答:(1)正确。

(2)错误。

宏不能精简目标代码。

(3)错误。

高级语言程序经编译或解释后直接转换为目标代码。

(4)正确。

2.已知数据和符号定义A1 DB ?A2 DB 8K1 EQU 100判断下列指令的正误,并说明错误指令的原因。

(1)MOV K1,AX(2)MOV A2,AH(3)MOV BX,K1MOV [BX],DX(4)CMP A1,A2(5)K1 EQU 200答:(1)错误。

K1是符号常数,在此处相当于立即数100,故不能做目的操作数。

(2)正确。

(3)正确。

(4)错误。

A1、A2都是字节变量,相当于两个存储器单元,故不能同时出现在一条指令中直接进行比较。

(5)错误。

用EQU定义的符号不能重新赋值,除非已用PURGE解除了原值。

3.若数据段中有定义NUM1 EQU 23HNUM2 DW 0则指令MOV NUM2,NUM1 的源、目操作数的寻址方式以及指令执行后NUM2+1单元的内容分别是什么?答:指令MOV NUM2,NUM1的源操作数使用立即数寻址,目的操作数使用直接寻址。

指令执行后NUM2+1单元的内容是0。

4.设DS=6000H,BX=8432H,SS=5000H,SP=3258H,内存69632H~69635H单元的内容依次是00H、11H、22H、33H。

4字节指令CALL DWORD PTR [BX+1200H] 本身位于2000H:3250H处的双字单元中。

当8086执行该指令后转移至子程序入口时,CS、IP、SS、SP各寄存器以及栈顶2个字单元的内容分别是多少?答:执行结果为CS=3322H,IP=1100H,SS=5000H,SP=3254H,栈顶的两个字即断点地址,为2000H:3254H。

汇编语言实现四个以内十六进制的数到二进制的转换并输出

汇编语言实现四个以内十六进制的数到二进制的转换并输出

;程序功能:将四个16进制数(可以是数字以及A~F大小写均可以)转换成2进制数输出;程序举例:输入1234; 输出0001 0010 0011 0100;-----------数据段定义-------------DATAS SEGMENTDATA DB 10,?,10 DUP(?)RES DB 10 DUP(?) ;存放最后输入的4个数DATA0 DB'Please input Hexadecimal numbers :','$'DATA1 DB'The string is wrong,please input again:','$'DATA2 DB' ','$';这个字符串是为了输出空格DATA3 DB'The binary number you have input is:',0AH,0DH,'$'DATAS ENDS;-----------堆栈段-------------------STACK SEGMENTDW256 DUP(?)STACK ENDS;-----------代码段-------------------CODE SEGMENTASSUME DS:DATAS,SS:STACK,CS:CODESTART:MOV AX,DATASMOV DS,AXMOV DX,OFFSET DATA0 ;9号功能调用输出提示信息MOV AH,9INT 21HL0:MOV DX,OFFSET DATA ;输入16进制数(可以使1至9个)MOV AH,10INT 21HCALL INPUT ;函数调用CALL NEWLINECALL OUTPUTEXIT:MOV AH,4CHINT 21H;************将输入的字符串放到DX中***********INPUT P ROC NEARPUSH CXPUSH DXPUSH SIPUSH DICALL NEWLINEMOV DI,2MOV CX,0MOV CL,DATA[1] ;将输入的十六进制数个数存入CX;///////////////判断所有字符是否正确LOOP0:SUB DATA[DI],30H ;首先减去30H比较JL INAGAINCMP DATA[DI],9JLE COMPARESUB DATA[DI],07H ;若为A-F再减去7HJL INAGAINCMP DATA[DI],15JLE COMPARESUB DATA[DI],20H ;若为a-f再减去20HJL INAGAINCMP DATA[DI],15JLE COMPAREINAGAIN:CALL NEWLINE ;若输入不符合十六进制数规则,报错,从新输入CALL ERRORJMP L0COMPARE:INC DILOOP LOOP0JMP DEAL;////////////将后4位存入数组resDEAL:MOV DI,0 ;DI作为数组res的下标MOV CX,0MOV CL,DATA[1] ;将个数存入cl,再转到SI中CMP CX,4JAE NEXT0MOV SI,1 ;个数小于4时处理JMP REALNEXT0:MOV SI,CXSUB SI,3 ;将十六进制数个数中内容装换成对应下标MOV DX,0MOV CX,4 ;(改成更多要修改此处)cx为存入res中十六进制数个数REAL:INC SIMOV DL,DATA[SI] ;将输入的数字后4位存入res数组中MOV RES[DI],DLINC DILOOP REALPOP DIPOP SIPOP DXPOP CXRETINPUT ENDP;************将输入的数输出************OUTPUT PROC NEARPUSH AXPUSH BXPUSH DXPUSH CXPUSH DIMOV DX,OFFSET DATA3 ;提示信息MOV AH,9INT 21HCALL NEWLINE ;换行MOV DI,0MOV DX,0MOV CX,0 ;将cx清0便于后面计数MOV CL,DATA[1]CMP CL,4 ;改成更多要修改此处,将CX中放入输入的16进制数个数JL LOOP1MOV CX,4 ;如果CX>4就只要最后四个LOOP1:PUSH CX ;此时cx为将要输出数字个数MOV CX,4 ;此处cx赋值4是因为每一个16进制数占4个二进制位MOV DL,RES[DI]LOOP2:MOV BL,DLAND DL,01H ;保留最低位PUSH DXMOV DL,BLROR DL,1LOOP LOOP2MOV CX,4 ;此处cx赋值4是因为每一个16进制数占4个二进制位LOOP3:POP DXADD DL,30HMOV AH,2INT 21HLOOP LOOP3CALL SPACENEXT1:INC DIPOP CXLOOP LOOP1POP DIPOP DXPOP CXPOP BXPOP AXRETOUTPUT ENDP;************提示出错信息************ERROR PROC NEARPUSH AXPUSH DXMOV DX,OFFSET DATA1MOV AH,9INT 21HPOP DXPOP AXRETERROR ENDP;************回车换行************ NEWLINE PROC NEARPUSH AXPUSH DXMOV DL,0AHMOV AH,2INT 21HMOV DL,0DHMOV AH,2INT 21HPOP DXPOP AXRETNEWLINE ENDP;************空格************ SPACE PROC NEARPUSH AXPUSH DXMOV DX,OFFSET DATA2MOV AH,9INT 21HPOP DXPOP AXRETSPACE ENDPCODE ENDSEND START。

二进制,十六进制,八进制的换算

二进制,十六进制,八进制的换算

二进制,十六进制,八进制的换算0,16,2进制的互相转换所谓16进制,就是由0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F共16个数字组成。

逢16进一位,下面就讲讲在没有任何工具的情况下如何将一10进制转化为16进制:1000除以16得62余8,那么最低位为8,再将62除以16得3余14,那么倒数第2为E(14对于16进制来说是E),3比16小了,所以不用继续除了,总的就是3E8,为1000的16进制数。

想要将16进制的数转化为10进制,只需将上面的步骤反过来做就可以了。

不用我多说吧!2进制仅由0、1两个数字组成,逢1进一。

要将一10进制化为2进制,介绍一个简单的方法,先将10进制的数化为16进制,再化为2进制,举个例子:515对应16进制为203H,将203转为2进制则为0010(2)0000(0)0011(3),一个位数对2进制来说是4个字符。

0H就是0000、1H就是0001、......、0EH就是1110、OFH为1111,大家可自己推一下。

总之大家一定要熟练掌握各个进制的互相转化,尤其是100以内10--16和16--10的互相转化要记住。

16-10H、32-20H、48-30H、64-40H、80-50H、96-60H、100-64H,255-FFH,65535-FF FFH,1677万-FF FF FFH,前为10进制,后有H的为16进制,这些能记住,以后修改就方便许多了。

二进制二进制是逢2进位的进位制,0、1是基本算符。

现代的电子计算机技术全部采用的是二进制,因为它只使用0、1两个数字符号,非常简单方便,易于用电子方式实现。

二进制四则运算规则加法0+0=0,0+1=1+0=1,1+1=10减法0-0=0,1-0=1,1-1=0,0-1=-1乘法0×0=0,0×1=1×0=0,1×1=1除法0÷1=0,1÷1=1一、什么是二进制在现实生活和记数器中,如果表示数的"器件"只有两种状态,如电灯的"亮"与"灭",开关的"开"与"关"。

MCS_8086习题4_答案(部分)

MCS_8086习题4_答案(部分)

习题4答案:1. 从屏幕上输入大写字母,转换为小写字母并输出(生成.COM文件)要求:程序具有可读性、容错性code segment paraassume cs:code, ss:ss_seg, ds:dataorg 0100Hmain proc farmain1: lea dx, str1 ;显示提示信息mov ah, 9int 21hmov ah, 1 ;输入小写字母int 21hcmp al, ‘A’;判断输入字符是否为’a’~’z’jb errorcmp al, ‘Z’ja errorjmp nexterror: lea dx, str2 ;显示错误提示信息mov ah, 9int 21hjmp main1 ;跳转,重新输入next: add al, 20hpush axlea dx, str3 ;显示输出提示信息mov ah, 9int 21hpop axmov dl, al ;显示转换后的大写字母mov ah, 2int 21hmov ax, 4c00h ;返回操作系统int 21hmain endpstr1 db 0dh, 0ah, ‘Please input(a-z): $’str2 db 0dh, 0ah, ‘The input is error!$’str3 db 0dh, 0ah, ‘The result is: $’code endsend main2. 编写一子程序asc2bin,将ASCII转换为二进制数要求:输入参数:AL中存放需要转换的ASCII输出参数:AL中存放转换后的二进制数并返回;功能:将ASCII转换为二进制数;输入参数:AL中存放需要转换的ASCII;输出参数:AL中存放转换后得到的二进制数asc2bin procsub al, 30hcmp al, 9jbe asc2bin_1sub al, 7asc2bin_1: retasc2bin endp3. 内存中存放8个16位有符号数,求8个数值之和,并将结果存放在内存变量SUM中注:程序中应用到字扩展为双字的指令CWDdata segment parabuf dw -1, 30000, 35000, 36000, 37000, 20000, 10000, -2sum dd 0data endsss_seg segment stackdw 100 dup(0)ss_seg endscode segment paraassume cs:code, ds:data, ss:ss_segmain proc farmov ax, datamov ds, axlea bx, buf ;bx指向buf首地址mov cx, 8main1: mov ax, [bx]cwd ;有符号数字扩展为双字add word ptr sum, ax ;32位数相加adc word ptr sum + 2, dxinc bxinc bxloop main1 ;循环8次mov ax, 4c00hint 21hmain endpcode endsend main4. 内存中存放8个8位有符号数,请按从大到小顺序排列data segment parabuf db -1, 30, 35, 36, 37, 20, 100, -2data endsss_seg segment stackdw 100 dup(0)ss_seg endsassume cs:code, ds:data, ss:ss_segmain proc farmov ax, datamov ds, axmov cx, 8main1: mov bx, 0 ;外循环mov di, 0push cxmain2: mov al, buf[bx] ;内循环cmp al, buf[bx+1]jge nextxchg al, buf[bx+1] ;不符合规则, 则交换数据mov buf[bx], almov di, 1next: inc bxloop main2pop cxcmp di, 0 ;判断内循环是否发生数据交换jz exitloop main1exit: mov ax, 4c00hint 21hmain endpcode endsend main5. 内存中有8个16位数,请编写程序将8个数倒序排放例:定义内存中8个数buf dw 100, 3, 1, 20, 40, -2, 7, 10 程序运行后,buf开始应为:buf dw 10, 7, -2, 40, 20, 1, 3, 100buf dw -1, 30000, 35000, 36000, 37000, 20000, 10000, -2 data endsss_seg segment stackdw 100 dup(0)ss_seg endscode segment paraassume cs:code, ds:data, ss:ss_segmain proc farmov ax, datamov ds, axmov bx, 0mov cx, 8main1: push buf[bx]inc bxinc bxloop main1 ;8个数依次入堆栈lea bx, bufmov cx, 8main2: pop [bx]inc bxinc bxloop main2 ;8个数依次出栈mov ax, 4c00hint 21hmain endpcode endsend main6. 从键盘输入4位十进制数,然后以16进制形式显示在屏幕上.例:键盘输入:1024 屏幕上应显示:0400H要求:键盘输入和显示结果时均应有提示data segment parabuf db 4 dup(0)var dw 0str1 db 0dh, 0ah, ‘Please input four numbers(0-9): $’str2 db 0dh, 0ah, ‘The input is error, please try again. $’str2 db 0dh, 0ah, ‘The hex result is: $’data endsss_seg segment stackdw 100 dup(0)ss_seg endscode segment paraassume cs:code, ds:data, ss:ss_segmain proc farmov ax, datamov ds, axmain1: lea dx, str1 ;显示数据输入提示信息mov ah, 9int 21hmov bx, 0mov cx, 4 ;循环输入4个数main2: mov ah, 1 ;DOS功能调用,输入数据int 21hcmp al, ‘0’;判断输入字符是否为’0’-‘9’jb errorcmp al, ‘9’ja error ;若不为’0’-‘9’,则进行错误处理sub al, 30h ;ASCII转换为二进制,得到0-9mov buf[bx], al ;存入buf开始的缓冲区inc bxloop main2jmp next ;数据输入正确后,跳转到后续处理error: lea dx, str2 ;显示错误提示信息mov ah, 9int 21hjmp main1 ;跳转到重新输入next: mov ax, 0 ;(((0*10+B3)*10+B2)*10+B1)*10+B0 mov dx, 0 ;得到输入的4位十进制数mov si, 10mov bx, 0mov cx, 4main3: mul si ;相乘后dx仍然保持0mov dl, buf[bx]mov dh, 0add ax, dxinc bxloop main3 ;循环4次乘10mov var, ax ;得到的4位十进制数存放到var中lea dx, str3mov ah, 9int 21h ;显示输出提示符mov ch, 4 ;以16进制显示输入的数据, 循环4次mov cl, 4main4: rol var, cl ;循环左移4位mov ax, varand ax, 000fhcall bin2asc ;二进制转换为ASCIIcall pchar ;显示16进制dec chjnz main4mov al, ‘H’call pcharmov ax, 4c00hint 21hmain endp;功能: 将一个二进制数转换为ASCII;输入参数: AL中存放要转换的二进制数;输出参数: AL中存放转换后的ASCIIbin2asc procand al, 0fhadd al, 30hcmp al, 39hjbe bin2asc_1add al, 07hbin2asc_1: r etbin2asc endp;功能:显示字符;输入参数:AL中存放要显示字符的ASCII;输出参数:无pchar procmov dl, almov ah, 2int 21hretpchar endpcode endsend main7. 数据段从100H开始存放字符串str1,从200H开始存放str2,二者均以NULL字符为结束符,编写程序将str2拷贝到str1末尾,形成一个完整字符串例:ORG 100Hstr1 db 0dh, 0ah, ‘Hello ’, 0ORG 200Hstr2 db ‘Automation!’, 0程序运行后结果应为:str1 db 0dh, 0ah, ‘Hello Automation!’, 0 data segment paraORG 100Hstr1 db 0dh, 0ah, ‘Hello ’, 0ORG 200Hstr2 db ‘Automation!’, 0data endsss_seg segment stackdw 100 dup(0)ss_seg endscode segment paraassume cs:code, ds:data, ss:ss_segmain proc farmov ax, datamov ds, axmov es, axlea di, str1 ;es:di指向str1首地址mov al, 0repnz scasb ;查找str1结束符NULLdec di ;找到str1结束符,并让es:di指向该位置lea si, str2 ;ds:si指向str2首地址cld ;DF = 0main1: lodsb ;AL ← (ds:si), si = si + 1 stosb ;(es:di) ← AL, di = di + 1cmp al, 0 ;判断是否到str2的结束符jnz main1lea si, str1 ;ds:si指向拷贝后的str1首地址main2: lodsb ;显示拷贝后的str1字符串cmp al, 0jz exitcall pcharjmp main2exit: mov ax, 4c00hint 21hmain endp;功能:显示字符;输入参数:AL中存放要显示字符的ASCII;输出参数:无pchar procmov dl, almov ah, 2int 21hretpchar endpcode endsend main8. 以10进制形式显示内存中一有符号字节数据例:var db 0ffH屏幕应显示:The result is: -1data segment paravar db 7fhstr1 db 0dh, 0ah, ‘The result is: ’buf db 4 dup(‘’)db ‘$’data endsss_seg segment stackdw 100 dup(0)ss_seg endscode segment paraassume cs:code, ds:data, ss:ss_segmain proc farmov ax, datamov ds, axmov buf, ‘+’cmp var, 0 ;判断var是正数,还是负数jge nextmov buf, ‘-‘neg var ;若var为负,则得到其相反数next: mov al, varmov cx, 3mov dl, 10lea bx, buf+3main1: mov ah, 0div dl ; (AX / 10)商→ aladd ah, 30h ; (AX / 10)余数→ ahmov [bx], ahdec bxloop main1 ;循环3次,分别得到百、十、个位lea dx, str1 ;显示10进制数mov ah, 9int 21hexit: mov ax, 4c00hint 21hmain endpcode endsend main9. 将一个16位的无符号数var, 转换为非压缩格式BCD码,存放在内存中buf开始的单元中。

4位16进制浮点数 排列顺序

4位16进制浮点数 排列顺序

4位16进制浮点数排列顺序1. 了解16进制浮点数在计算机科学和工程领域,我们常常会遇到浮点数的表示和计算。

在16进制表示法中,浮点数将以十六进制数的形式表示。

通常,浮点数由两个十六进制数表示:尾数和指数。

2. 16进制浮点数的格式在IEEE 754标准中,单精度浮点数(32位)由1位符号位、8位指数位和23位尾数位组成;双精度浮点数(64位)由1位符号位、11位指数位和52位尾数位组成。

在16进制表示法中,我们通常以p-1位二进制数表示尾数,以q位二进制数表示指数。

3. 4位16进制浮点数的表示4位16进制浮点数通常指的是单精度浮点数的尾数或指数部分。

在16进制表示法中,每个十六进制数字可以用4位二进制数表示。

4位16进制浮点数将被表示为一个4位的十六进制数,对应着16位的二进制数。

4. 16进制浮点数的排列顺序在计算机中,存储和排列顺序是十分重要的。

对于4位16进制浮点数,排列顺序可能会影响到计算结果和数据传输的准确性。

常见的排列顺序有大端序和小端序两种。

5. 大端序(Big Endian)排列顺序在大端序排列顺序中,数值的最高位(即符号位)存储在最低的内存位置区域中,而数值的最低位则存储在最高的内存位置区域中。

对于4位16进制浮点数,在大端序排列中,高位的十六进制数将存储在低位置区域中,低位的十六进制数将存储在高位置区域中。

6. 小端序(Little Endian)排列顺序与大端序相反,在小端序排列顺序中,数值的最高位存储在最高的内存位置区域中,而数值的最低位存储在最低的内存位置区域中。

对于4位16进制浮点数,在小端序排列中,高位的十六进制数将存储在高位置区域中,低位的十六进制数将存储在低位置区域中。

7. 排列顺序的影响排列顺序的选择会对数据的解析和传输产生影响。

在不同的计算机体系结构和操作系统中,可能会采用不同的排列顺序。

在进行数据交换和传输时,需要注意排列顺序的匹配,以确保数据的准确性和一致性。

计算机网络简答题和应用题

计算机网络简答题和应用题

1.简述为什么要对计算机网络进行分层,以及分层的一般原则。

2.ISO的OSI参考模型为几层?请由低到高顺序写出所有层次。

3.在TCP/IP网络体系模型中,因特网定义了五个层次。

写出这五层的名称,以及各层的主要功能。

并分别说明1~5层信息格式的名称。

4.简述星形网络的结构及其优缺点。

5.数字数据在模拟信道传输时,为什么要进行调制?6.物理层的功能是什么?物理层的接口规定了哪些特性?7.说明中继器、网桥、路由器和网关的主要功能,以及分别工作在网络体系结构的哪一层?8.举出网络高层应用中最基本的几种应用,并准确说明这些应用所涉及协议的中文名称与英文缩写。

9.简述以太网中,CSMA/CD的工作方式、工作特点以及优缺点。

10.简述对等网模式、客户机/服务器模式、浏览器/服务器模式的特点。

、11.简述虚拟局域网与普通局域网的差异。

12.简述广域网的定义和组成。

邮件服务器使用的基本协议有哪几个?13.子网掩码的用途是什么?14.邮件服务器使用的基本协议有哪几个?15.简述代理服务器技术的优点。

16.用户账户与计算机账户的区别。

17.组和组织单位的区别。

18.什么叫“上传”、“下载”?19.简述DNS服务器的工作过程?20.为了安装DHCP服务,必须在运行 Windows 2000 Server 的计算机上配置哪些内容?五、应用题1.将十进制IP地址61.149.143.20转换成二进制形式,并用十六进制数表示,并说明是哪一类IP地址,该类地址最大网络和每个网络中的最大主机数。

2.对于子网掩码为255.255.252.0的B类网络地址,能够创建多少个子网?3.对于子网掩码为255.255.255.192的C类网络地址,能够分配多少台主机?4.在活动目录中如何创建共享文件夹?5.如何安装和设置网络协议、客户、服务。

6.如何建立并使用一台网络打印机。

7.如何配置IP地址?8.如何安装DHCP服务器?9.如何建立一个Web服务器?10.掌握简单局域网组网的连接方法和常用网络设备1.a.因为计算机网络是一个复杂的系统,采用层次化结构的方法来描述它,可以将复杂的网络间题分解为许多比较小的、界线比较清晰简单的部分来处理。

很完整的281016进制转换方法

很完整的281016进制转换方法

很完整的2、8、10、16进制转换方法最近在研究C语言,因为要用到各进制间转换,所以收集了一些资料…这是一节“前不着村后不着店”的课。

不同进制之间的转换纯粹是数学上的计算。

不过,你不必担心会有么复杂,无非是乘或除的计算。

生活中其实很多地方的计数方法都多少有点不同进制的影子。

比如我们最常用的10进制,其实起源于人有10个指头。

如果我们的祖先始终没有摆脱手脚不分的境况,我想我们现在一定是在使用20进制。

至于二进制……没有袜子称为0只袜子,有一只袜子称为1只袜子,但若有两袜子,则我们常说的是:1双袜子。

生活中还有:七进制,比如星期。

十六进制,比如小时或“一打”,六十进制,比如分钟或角度……我们找到问号字符(?)的ASCII值是63,那么我们可以把它转换为八进值:77,然后用‘\77′来表示'?'。

由于是八进制,所以本应写成‘\077′,但因为C,C++规定不允许使用斜杠加10进制数来表示字符,所以这里的0可以不写。

事实上我们很少在实际编程中非要用转义符加八进制数来表示一个字符,所以,6.2.4小节的内容,大家仅仅了解就行。

6.2.5 十六进制数转换成十进制数2进制,用两个阿拉伯数字:0、1;8进制,用八个阿拉伯数字:0、1、2、3、4、5、6、7;10进制,用十个阿拉伯数字:0到9;16进制,用十六个阿拉伯数字……等等,阿拉伯人或说是印度人,只发明了10个数字啊?16进制就是逢16进1,但我们只有0~9这十个数字,所以我们用A,B,C,D,E,F这五个字母来分别表示10,11,12,13,14,15。

字母不区分大小写。

十六进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方……所以,在第N(N从0开始)位上,如果是是数 X (X 大于等于0,并且X小于等于 15,即:F)表示的大小为 X * 16的N次方。

假设有一个十六进数 2AF5, 那么如何换算成10进制呢?用竖式计算:2AF5换算成10进制:第0位: 5 * 16^0 = 5第1位: F * 16^1 = 240第2位: A * 16^2 = 2560第3位: 2 * 16^3 = 8192 +————————————-10997直接计算就是:5 * 16^0 + F * 16^1 + A * 16^2 + 2 * 16^3 = 10997(别忘了,在上面的计算中,A表示10,而F表示15)现在可以看出,所有进制换算成10进制,关键在于各自的权值不同。

编程题 试卷2

编程题 试卷2

一、分析题(每题4分,共500分)1. 编写一完整程序,比较两个字符串STR1和STR2所含字符是否完全相同,如果相同(AL)=1,不相同(AL)=0.2. 编写一段程序统计BUF缓冲区100个字数据中为0的个数,并将统计结果保存在DL 中。

3. 比较5个字节的字符串A和B,若两个字符串不相等则字节标志单元FLG置1;否则清0。

4. 设STR开始有一个长度为50个字节的字符串,编一段程序,将字符串的所有字符向后(大地址)移动20个字节。

5. 已知在AX、BX中放有一个32位二进制数,求其补码,并送入CX、DX之中,其中AX、CX放高位。

6. 在A字单元有一个有符号被除数,在B字单元有一个有符号除数,求其商存于C字单元中,余数存D字单元中,试编程实现之。

7.8. 编写一个完整的程序放在代码段CSEG中,要求把数据段中两个字单元X和Y•的内容相加,结果放在AX中.9. 试编写一程序段把40个字母A的字符串从源缓冲区传送到目的缓冲区。

10. 在A地址处有10个数据,现要求传送到B地址处,请编程实现。

11. 在A、B地址起各有4个字节单元的无符号数,试编程实现二个无符号数的和,并将值存于C址起的单元中。

12. 按下面要求写出程序的框架:①定义一个数据段,其中开辟100个字单元、初值为0;②定义一个代码段,并在其中指定段寄存器、指定主程序从0100H开始、•给有关段寄存器赋值;③程序结束。

13. 编制将DS段中名为BUFB的字节存储区改写为空白字符(编码为20H)的程序段。

假定BUFB存储区定义为BUFB DB N DUP('^'),其中N为字面常量。

14. 将BUF中的16位数分成四组,每组四位,然后把这四组数分别存放在A、B、C、D字节变量中。

15. 编一段程序把BX中的二进制数用十六进制数的形式在屏幕上显示出来.16. 在附加段有一个字数组,其首地址已存放在DI寄存器中,在数组的第一个字中存放着该数组的长度.要求编制一个程序使该数组中的数按照从小到大的次序排列整齐.(起跑排序算法)17. 在ADDR单元中存放着数Y的地址,试编制一程序把Y中1的个数存入COUNT单元中.18. 在STR 字符串中搜索字符A。

微机原理与接口技术试题库(含答案)

微机原理与接口技术试题库(含答案)

一、问答题:1、微型计算机是由五部分组成,包括控制器,运算器,存储器、输入设备,输出设备;控制器控制计算机运转,计算器主要是算术运臬和逻辑运算,存储器主要是存储信息,输入设备主要是输入信息给计算机,输出设备主要是计算机输出信息。

2、IBM PC机的主存主要有只读存储器和随机存储器。

只读存储器只能读出,不能写入,随机存储器可以写入也可以读出。

3、8086微处理器的字长为16位,能直接访问的存储单元可以是2个字节。

4、8088微处理器的逻辑地址两部分组成,包括段地址和偏移地址;物理地址=段地址*16+偏移地址。

5、如果一个程序在执行前(CS)=0A7F0H,(IP)=2B40H,该程序的起始地址=0A7F0H*16+2B40H=0AAA40H。

6、02003H02002H02001H02000H77种(1).立即数寻址(2).寄存器寻址(3).直接寻址(4).寄存器间接寻址(5).寄存器相对寻址方式(6).基址变址寻址方式(7).相对基址变址寻址方式二、填空题1、CPU、存储器2、4、4、ALU3、逻辑地址、物理地址4、偏移地址,段基址*16+偏移地址,段寄存器5、码、操作数6、寄存器相对寻址方式,寄存器间接寻址,直接寻址,基址变址寻址方式,寄存器寻址,立即数寻址,相对基址变址寻址方式,寄存器相对寻址方式7、ZF,CF,SF,OF8、1,有符号9、05AEH,4000H10、0AB0H,1,1,0F8B0H,1,1三、选择题1、C2、A3、C4、B5、A6、D7、C8、B9、C 10、D四、是非判断题1、×2、×3、√4、√5、×6、×五、根据以下要求选用相应的指令或指令序列1、MOV AX,4629H2、LDS BX,DA TA3、ADD DX,BX4、SUB AX,0360H5、MOV BX,ES:[0500H]6、MOV CL,2SHL AL,CL7、IMUL BL8、MOV CX,09、OR DX,0E00H5、AND AL,0FH6、XOR CL,0F0H7、MOV CL,2SAR AX,CL13、MOV CL,4ROL AL,CL14、SHL AX,1RCL DX,115、NEG DXNEG AXSBB DX,0=======================================================一、回答下列问题1、设V ALA EQU 200V ALB EQU 30V ALC EQU 1BH下列表达式的值各为多少?(1)(V ALA*V ALC+V ALB)/V ALC(2)(V ALB AND 0FH)OR (V ALB XOR 0FH)(3)(V ALA GE V ALB )AND 0FH2. 根据下列要求编写一个汇编语言程序::(1)代码段的段名为COD_SG(2)数据段的段名为DA T_SG(3)堆栈段的段名为STK_SG(4)变量HIGH_DA T所包含的数据为95(5)将变量HIGH_DAT装入寄存器AH,BH和DL(6)程序运行的入口地址为START3、定义一个数据段的字符变量和数据变量。

第四章 汇编语言程序设计基础

第四章  汇编语言程序设计基础

4.2.2 分支程序的设计方法 ★条件控制 ★逻辑尺控制 ★地址跳转表控制
1. 条件控制——利用比较和条件转移指令实现分支,是最常用的 程序设计方法。
பைடு நூலகம்
例如,求解函数:
练习题2. 编写程序,比较两个字符串STRING1和STRING2所 含字符是否完全相同,若相同则显示“MATCH”,若不同则显示 “NO MATCH”。 答案: datarea segment string1 db ‘asfioa’ ;定义字符串STRING1 string2 db ‘xcviyoaf’ ;定义字符串STRING2 mess1 db ‘MATCH’,’$’ ;定义显示字串“MATCH” mess2 db ‘NO MATCH’,’$’ ;定义显示字串“NO MATCH” datarea ends prognam segment main proc far assume cs:prognam,ds:datarea start: push ds ;将ds:00入栈 sub ax,ax push ax mov ax,datarea ;装填数据段及附加段 mov ds,ax mov es,ax
程序流程图
mov ch,4 rotate: mov cl, 4 rol bx,cl mov al,bl and al,0fh add al,30h ;’0’-’9’ ASCII 30H-39H cmp al,3ah jl printit add al,7h ;’A’-’F’ ASCII 41H-46H printit: mov dl,al mov ah,2 int 21h dec ch jnz rotate
例4.3 将首地址为A的N字数组按照从小到大的次序整序(气 泡算法,多重循环) A dw 32,85,16,15, 8

常见的英文字母相应的十进制

常见的英文字母相应的十进制

常见的英文字母相应的十进制,二进制。

常见的数字的十进制。

二进制
二进制数(仅4位的2进制数) = 十进制数= 16进制数0000 = 0 = 0
0001 = 1 = 1
0010 = 2 = 2
0011 = 3 = 3
0100 = 4 = 4
0101 = 5 = 5
0110 = 6 = 6
0111 = 7 = 7
1000 = 8 = 8
1001 = 9 = 9
1010 = 10 = A
1011 = 11 = B
1100 = 12 = C
1101 = 13 = D
1110 = 14 = E
1111 = 15 = F
@8
当你能熟练记住这些常用的,那么做2进制数与16进制数相互转换的时候就很轻松了。

来给你举个例子看看啊。

111111011010010110011011(这是一个2进制数)
先把它所包含的数字分成4个4个在一块,如下所示:
1111 1101 1010 0101 1001 1011
根据上述常用表可以得到
1111=F
1101=D
1010=A
0101=5
1001=9
1011=B
那么它所对应的16进制数就是“FDA59B”
同理给你一个16进制数,怎么快速转换成2进制呢?FD(16)=?(2)
呵呵,记住上面的常用数据表,那不是很快就出来了。

FD(16)=1111 1101(2)
2
|评论。

16进制异或运算

16进制异或运算

16进制异或运算:从原理到实现16进制异或运算是计算机科学中常用的逻辑运算符,具有广泛的应用。

本文将深入介绍16进制异或运算的原理、性质、应用以及实现方法。

一、16进制异或运算的原理16进制异或运算是指在二进制逐位运算的基础上,将每个二进制数位替换为4位16进制数,进行异或运算。

异或运算的结果是将两个数的相同位取0,不同位取1,因此被广泛应用于信息加密、校验等领域。

二、16进制异或运算的性质1. 交换律:a ⊕ b = b ⊕ a2. 结合律:(a ⊕ b) ⊕ c = a ⊕ (b ⊕ c)3. 自反性:a ⊕ a = 04. 恒等律:a ⊕ 0 = a三、16进制异或运算的应用1. 数据加密:异或运算可以对数据进行加密处理,使数据更加安全,常用于通信、文件传输等领域。

2. 数据校验:异或运算可以检测数据传输中的错误,常用于数据校验、校验和等领域。

3. 系统设计:异或运算可以应用于系统设计中,例如在计算机内存中进行数据校验、纠错等方面。

四、16进制异或运算的实现方法在计算机中,可以使用位运算实现异或运算。

对于16进制数,需要将其转换为对应的二进制数后,再进行异或运算。

下面是一个实现16进制异或运算的Python代码示例:```def hex_xor(a, b):hex_dict = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4,'5': 5, '6': 6, '7': 7, '8': 8, '9': 9, 'a': 10, 'b': 11, 'c': 12, 'd': 13, 'e': 14, 'f': 15}bin_a = bin(int(a, 16))[2:].zfill(4)bin_b = bin(int(b, 16))[2:].zfill(4)bin_result = ''for i in range(4):bin_result += str(int(bin_a[i]) ^ int(bin_b[i]))hex_result = hex(int(bin_result, 2))[2:]return hex_resulta = '0x16'b = '0x3f'print(hex_xor(a, b)) # 输出 29```通过该代码,可以快速实现16进制异或运算的功能。

从键盘上输入4个16进制数

从键盘上输入4个16进制数

;从键盘上输入4个16进制数,转换成10进制数并输出。

(区分大小写,只认数字和字符);550408.asmDA TA SEGMENTSTR1 DB 'INPUT A HEX NUM: $'HEX DB 5 ;计划输入的字符个数(含回车符)NNN DB 0 ;存放实际输入的字符个数DB 5 DUP(?)BIN DW ? ;输入数字的二进制形式的存放单元ERR DB 0AH, 0DH, ' ERROR !'DB 0AH, 0DH, ' I HA VE NO TIME TO PLAY WITH YOU ! $'STR2 DB 13, 10, 'BINARY IS: $'DA TA ENDS;--------------------------------------------STACK SEGMENT PARA STACK 'STACK'DB 100 DUP(?)STACK ENDS;--------------------------------------------CODE SEGMENTASSUME CS:CODE, SS:STACK, DS:DA TASTART:MOV AX, DA TAMOV DS, AXMOV AX, STACKMOV SS, AXLEA DX, STR1 ;'INPUT A HEX NUM'MOV AH, 9 ;显示字符串INT 21HLEA DX, HEXMOV AH, 10 ;等着输入四位HEX数INT 21H;---------------------------------------;下面进行转换MOV BIN, 0 ;先把二进制数字单元清零LEA SI, HEX + 2;取输入字符串的首地址MOV CH, NNN ;取输入字符的个数,用来控制循环处理的次数CONV:MOV BL, [SI] ;取来一个字符CMP BL, 0DH ;和回车符进行比较JZ END0 ;是, 即结束CMP BL, '0'JB ERROR ;小于'0'转移CMP BL, 'F'JA ERROR ;大于'F'转移CMP BL, '9'JNA A2B ;不大于'9', 就去变换CMP BL, 'A'JNB A2B ;不小于'A', 就去变换JMP ERROR ;其它符号都是错误;---------------------------------------A2B:SUB BL, 30H ;ASC-->BINCMP BL, 10JB A2B_ENDSUB BL, 07H ;ASC-->BINA2B_END:;---------------------------------------MOV BH, 0 ;弄成16位数PUSH CXMOV AX, BIN ;把原来的数字乘以16MOV CX, 16MUL CXADD AX, BX ;加上新输入的MOV BIN, AX ;存结果,这就是二进制数INC SIPOP CXDEC CH ;处理次数减一JNZ CONV ;非零转移;---------------------------------------DISP:LEA DX, STR2 ;'BINARY IS: $'MOV AH, 9 ;显示字符串INT 21H;---------------------------------------MOV AX, BIN ;取来数字MOV CX, 16 ;显示16位数DDDD:MOV DL, '0' ;先计划显示0TEST AX, 8000H ;测试最高位JZ DDD1INC DL ;非0就显示1DDD1:PUSH AXMOV AH, 2 ;显示DL中的ASCII码INT 21HPOP AXSHL AX, 1 ;左移LOOP DDDD ;CX-1,非零转移JMP END0 ;16位显示完毕,转到结束;---------------------------------------ERROR:LEA DX, ERRMOV AH, 09H ;错误信息提示INT 21H;---------------------------------------END0:MOV DL, 10MOV AH, 2 ;显示DL中的ASCII码INT 21HMOV DL, 13MOV AH, 2 ;显示DL中的ASCII码INT 21H;---------------------------------------MOV AX, BIN ;取来数字CALL DISP_AXMOV AH, 4CH ;返回DOSINT 21H;------------------------------DISP_AX:MOV BX, 10 ;10进制.MOV CX, 5 ;5位.ABC:MOV DX, 0DIV BXPUSH DX ;保存余数LOOP ABCMOV CX, 5 ;显示5位. ASD:POP DXCMP DL, 10JB A48ADD DL, 7A48:ADD DL, 48MOV AH, 2INT 21H ;输出.LOOP ASDRET;------------------------------CODE ENDS;---------------------------------------END START。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

;从键盘上输入4个16进制数,转换成10进制数并输出。

(区分大小写,只认数字和字符);550408.asm
DA TA SEGMENT
STR1 DB 'INPUT A HEX NUM: $'
HEX DB 5 ;计划输入的字符个数(含回车符)
NNN DB 0 ;存放实际输入的字符个数
DB 5 DUP(?)
BIN DW ? ;输入数字的二进制形式的存放单元
ERR DB 0AH, 0DH, ' ERROR !'
DB 0AH, 0DH, ' I HA VE NO TIME TO PLAY WITH YOU ! $'
STR2 DB 13, 10, 'BINARY IS: $'
DA TA ENDS
;--------------------------------------------
STACK SEGMENT PARA STACK 'STACK'
DB 100 DUP(?)
STACK ENDS
;--------------------------------------------
CODE SEGMENT
ASSUME CS:CODE, SS:STACK, DS:DA TA
START:
MOV AX, DA TA
MOV DS, AX
MOV AX, STACK
MOV SS, AX
LEA DX, STR1 ;'INPUT A HEX NUM'
MOV AH, 9 ;显示字符串
INT 21H
LEA DX, HEX
MOV AH, 10 ;等着输入四位HEX数
INT 21H
;---------------------------------------
;下面进行转换
MOV BIN, 0 ;先把二进制数字单元清零
LEA SI, HEX + 2;取输入字符串的首地址
MOV CH, NNN ;取输入字符的个数,用来控制循环处理的次数
CONV:
MOV BL, [SI] ;取来一个字符
CMP BL, 0DH ;和回车符进行比较
JZ END0 ;是, 即结束
CMP BL, '0'
JB ERROR ;小于'0'转移
CMP BL, 'F'
JA ERROR ;大于'F'转移
CMP BL, '9'
JNA A2B ;不大于'9', 就去变换
CMP BL, 'A'
JNB A2B ;不小于'A', 就去变换
JMP ERROR ;其它符号都是错误
;---------------------------------------
A2B:
SUB BL, 30H ;ASC-->BIN
CMP BL, 10
JB A2B_END
SUB BL, 07H ;ASC-->BIN
A2B_END:
;---------------------------------------
MOV BH, 0 ;弄成16位数
PUSH CX
MOV AX, BIN ;把原来的数字乘以16
MOV CX, 16
MUL CX
ADD AX, BX ;加上新输入的
MOV BIN, AX ;存结果,这就是二进制数INC SI
POP CX
DEC CH ;处理次数减一
JNZ CONV ;非零转移
;---------------------------------------
DISP:
LEA DX, STR2 ;'BINARY IS: $'
MOV AH, 9 ;显示字符串
INT 21H
;---------------------------------------
MOV AX, BIN ;取来数字
MOV CX, 16 ;显示16位数
DDDD:
MOV DL, '0' ;先计划显示0
TEST AX, 8000H ;测试最高位
JZ DDD1
INC DL ;非0就显示1
DDD1:
PUSH AX
MOV AH, 2 ;显示DL中的ASCII码
INT 21H
POP AX
SHL AX, 1 ;左移
LOOP DDDD ;CX-1,非零转移
JMP END0 ;16位显示完毕,转到结束;---------------------------------------
ERROR:
LEA DX, ERR
MOV AH, 09H ;错误信息提示
INT 21H
;---------------------------------------
END0:
MOV DL, 10
MOV AH, 2 ;显示DL中的ASCII码
INT 21H
MOV DL, 13
MOV AH, 2 ;显示DL中的ASCII码
INT 21H
;---------------------------------------
MOV AX, BIN ;取来数字
CALL DISP_AX
MOV AH, 4CH ;返回DOS
INT 21H
;------------------------------
DISP_AX:
MOV BX, 10 ;10进制.
MOV CX, 5 ;5位.
ABC:
MOV DX, 0
DIV BX
PUSH DX ;保存余数
LOOP ABC
MOV CX, 5 ;显示5位. ASD:
POP DX
CMP DL, 10
JB A48
ADD DL, 7
A48:
ADD DL, 48
MOV AH, 2
INT 21H ;输出.
LOOP ASD
RET
;------------------------------
CODE ENDS
;---------------------------------------
END START。

相关文档
最新文档